2009-08-21 6 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

관련 문제