我已经成功地实现一个WPF菜单,顶级项目画为大按钮和下级项目被绘制成标准菜单项(见我以前的问题, 在这里和这里 )。
在我这个我下层项目模板(原企图SubItemTemplate
在下面的例子中)包含一个图像和文本块。 结果是什么,看起来像一个正常的菜单项具有空图标区,旁边的菜单项的文本部分的文本图像。 我不希望看到的图标区域在视觉显示器,因为我认为整个视觉显示会通过我的模板的内容来确定。 顶级模板( TopLevelItemTemplate
)没有任何空白图标区可见。
当我从德较低级别的模板中删除我的形象,并与风格引领者的Icon属性取代了它,我得到了我想要的显示。
我不知道如何和为什么我的下级项的DataTemplate存在图标属性。
这里是我的代码。 该物业HasParent
用于区分不属于顶级菜单项(即,绘制与的那些SubItemTemplate
)。 我不明白的部分是DataTrigger。
为什么会出现一个图标属性可用的触发器内?
<UserControl.Resources>
<Image x:Key="MenuIconResource16" Height="16" Width="16" Source="{Binding Icon32}" x:Shared="False" />
<HierarchicalDataTemplate x:Key="TopLevelItemTemplate" ItemsSource="{Binding Children}">
<StackPanel VerticalAlignment="Bottom" Orientation="Vertical">
<Image Width="32" Height="32" VerticalAlignment="Center" Source="{Binding Icon32}" ToolTip="{Binding UserHint}" />
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="SubItemTemplate" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</UserControl.Resources>
<WrapPanel Height="Auto">
<Menu ItemsSource="{Binding DataContext.EventMenu.TopLevel, ElementName=UserControl}" ItemTemplateSelector="{StaticResource MenuItemTemplateSelector}">
<Menu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter" Value="{Binding EventType}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding HasParent}" Value="true">
<Setter Property="Icon" Value="{StaticResource MenuIconResource16}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Menu.ItemContainerStyle>
</Menu>
</WrapPanel>