2012-05-22 22 views
1

DataContext для моего окна - это IDictionary>.WPF/Xaml ContextMenu Поведение ItemContainerStyle

Может кто-нибудь объяснить мне, почему это работает отлично:

<Style x:Key="MenuItemStyle"> 
    <Setter Property="MenuItem.Header" Value="{Binding Ticker}"/> 
</Style> 
<Style x:Key="ContextMenuStyle"> 
    <Setter Property="MenuItem.Header" Value="{Binding Key}"/> 
    <Setter Property="MenuItem.ItemsSource" Value="{Binding Value}"/> 
    <Setter Property="MenuItem.ItemContainerStyle" Value="{StaticResource MenuItemStyle}"/> 
</Style> 
<ContextMenu ItemContainerStyle="{StaticResource ContextMenuStyle}" ItemsSource="{Binding Quotes}" /> 

Но это не делает:

<Style TargetType="{x:Type ContextMenu}" x:Key="ContextMenuStyle"> 
    <Setter Property="MenuItem.Header" Value="{Binding Key}"/> 
    <Setter Property="MenuItem.ItemsSource" Value="{Binding Value}"/> 
    <Setter Property="MenuItem.ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type MenuItem}"> 
       <Setter Property="Header" Value="{Binding Ticker}"/> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 
<ContextMenu ItemContainerStyle="{StaticResource ContextMenuStyle}" ItemsSource="{Binding Quotes}" /> 

EDIT: если я удалить T'argetType = "{х: Тип ContextMenu}" ', он отлично работает. Однако я не понимаю, почему.

благодарит

ответ

1

Вы должны изменить значение TargetType от ContextMenu к MenuItem. Свойство ItemContainerStyleContextMenu устанавливает стиль для элемента контейнера вашего ContextMenu, в данном случае MenuItem. Однако вы задаете целевой тип стиля ContextMenu, чтобы он не работал. См. this link для более подробной информации.

Смежные вопросы