2009-08-21 29 views
16

DataTemplateをMenuItemにアタッチするたびに、生成されたメニュー項目のそれぞれが左側に余分なスペースを確保します。この余分なスペースは、私が使用するチェック用に予約されたスペースと同じくらい広く見えます。 DataTemplateを使用せずに手動でメニューを構築しても、この余分なスペースは追加されません。余分なしわとして、この余分なスペースをクリックするとメニュー項目は消えますが、クリックイベントは生成されません。私はなぜこの余分なスペースを追加しているのかわかりません。何か案は?DataTemplateをMenuItemに使用すると、左側に余分なスペースが表示されますか?

私のXAMLコードは、より簡単にできませんでした:説明余分なスペースを持つ

メニュー:これは、ビジュアルツリーが作られますので

<Menu> 
    <MenuItem Header="Utilities" > 
     <MenuItem Header="Enemy01"/> 
     <MenuItem Header="Enemy02"/> 
     <MenuItem Header="Enemy03"/> 
    </MenuItem> 
</Menu> 
+0

詳細:https://github.com/fluentribbon/Fluent.Ribbon/issues/ 188 – juFo

+0

を参照してください:http://stackoverflow.com/questions/19965464/wpf-menuitem-icon-in-the-wrong-place-when-using-data-template?rq=1 – juFo

答えて

39

:余分なスペースのない

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemTemplate> 
      <DataTemplate> 
       <MenuItem Header="{Binding}"> 
       </MenuItem> 
      </DataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

メニューDataTemplateはコンテナに包まれます(この場合はMenuItem)。したがって、実際にMenuItemMenuItemにあります。これは余分なスペースと対話性の欠如を説明しています。 ItemTemplateMenuItemを含める必要はありません。

あなたの例ではなくのように記述される可能性があります。おそらく、より簡潔

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}"/> 
      </DataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

または、:

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
       <Setter Property="Header" Value="{Binding}"/> 
       <Setter Property="IsChecked"> 
        <Setter.Value> 
         <MultiBinding Converter="{StaticResource YourConverter}"> 
          <Binding .../> 
          <Binding .../> 
         </MultiBinding> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </MenuItem.ItemContainerStyle> 
    </MenuItem> 
</Menu> 
+0

あなたの答えをありがとう!別の質問がありました:ItemContainerStyleを使用して、MenuItemのIsCheckedプロパティをマルチバインディングにバインドする方法はありますか? – djcouchycouch

+0

問題ありません。それはおそらく別の質問になるはずですが、私は答えを更新してどのように表示するのですか。 –

+0

ああ、今私は理解している。感謝のケント! – djcouchycouch

関連する問題