[英]How do I select context menu template dynamically based on runtime property value in XAML? (context menu customization)
有两个上下文菜单。 要打开所需的上下文菜单,请单击鼠标右键。 如果IsData为true,则ContextMenu1将打开。 如果IsData为false,则ContextMenu2将打开。 该问题将在XAML中展开。
DataTemplate中有两个静态上下文菜单。 一个上下文菜单如何使用它们? 该块将完全设置模板上下文菜单。 选择哪个取决于条件。
<DataTemplate x:Key="ContextMenuControlTemplate">
<DataTemplate.Resources>
<ContextMenu x:Key="ContextMenuSet">
<MenuItem>
<MenuItem.Header>
<StackPanel Orientation="Horizontal">
<Image Width="15" Height="15" Source="{DynamicResource img_icon}"/>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text=" Add item" />
</StackPanel>
</MenuItem.Header>
<MenuItem.Icon>
<RadioButton IsChecked="True"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Remove"></MenuItem>
</ContextMenu>
<ContextMenu x:Key="ContextMenuDel">
<MenuItem Header=" Del all"></MenuItem>
</ContextMenu>
</DataTemplate.Resources>
<ContextMenu x:Name="contextMenuForItems"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Data.IsData}" Value="true">
<Setter TargetName="contextMenuForItems" Property="ContextMenu" Value="{StaticResource ContextMenuSet}" />
</DataTrigger>
<DataTrigger Binding="{Binding Data.IsData}" Value="false">
<Setter TargetName="contextMenuForItems" Property="ContextMenu" Value="{StaticResource ContextMenuDel}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
并且这里块试图使用我们建立的上下文菜单。 这是一个问题。
<DataTemplate>
<DockPanel>
<ContextMenu>
<DataTemplate>
<ContentControl Content="{Binding Data.IsData}"
ContentTemplate="{StaticResource ContextMenuControlTemplate}"
/>
</DataTemplate>
</ContextMenu>
</DockPanel>
</DataTemplate>
我使用了解决方法。 我做了一个复杂的菜单。 和一些缺少的MenuItem被删除。 请参见关键字Visibility和booleanToVisibilityConverter。 我的例子如下。
<DockPanel.ContextMenu>
<ContextMenu>
<MenuItem IsEnabled="False" Visibility="{Binding Data.IsData, Converter={StaticResource booleanToVisibilityConverter2}}">
<MenuItem.Header>
<StackPanel Orientation="Horizontal">
<Image Width="15" Height="15" Source="{DynamicResource img_icon}"/>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text=" Add item" />
</StackPanel>
</MenuItem.Header>
<MenuItem.Icon>
<RadioButton IsChecked="True"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="MenuItem_Click" Header="Remove" Visibility="{Binding Data.IsData, Converter={StaticResource booleanToVisibilityConverter2}}" />
<MenuItem Click="MenuItem_Click" Header="Del all" Visibility="{Binding Data.IsData, Converter={StaticResource booleanToVisibilityConverter2}, ConverterParameter=InvertCollapse}" />
</ContextMenu>
</DockPanel.ContextMenu>
booleanToVisibilityConverter2是BooleanToVisibilityConverter的包装,它具有其他属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.