我在上下文菜单中有一个 MenuItem,我想使用 ItemSource 为列表中的每个项目生成子 MenuItem。这些生成的项目中的每一个还应该有子菜单项活动(可检查)、编辑和删除。
Custom Messages
-Custom Message 1
-Active
-Edit
-Delete
-Custom Message 2
-Active
-Edit
-Delete
-Custom Message 3
-Active
-Edit
-Delete
Run Code Online (Sandbox Code Playgroud)
以下 XAML 部分有效:
<MenuItem Header="Custom Messages" Visibility="{Binding Path=HasCustomMessages, Converter={StaticResource BVC}}" ItemsSource="{Binding Path=CustomMessages}" DisplayMemberPath="Description">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="ItemsSource">
<Setter.Value>
<x:Array Type="FrameworkElement">
<MenuItem Header="Active" IsCheckable="True" IsChecked="{Binding Path=Active}"></MenuItem>
<Separator></Separator>
<MenuItem Header="Edit" Name="EditCustomMessageButton" Click="EditCustomMessageButton_Click" Style="{x:Null}"></MenuItem>
<MenuItem Header="Delete" Name="DeleteCustomMessageButton" Click="DeleteCustomMessageButton_Click" Style="{x:Null}"></MenuItem>
</x:Array>
</Setter.Value>
</Setter>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem Header="Add Custom Message" Name="AddCustomMessageButtton" Click="AddCustomMessageButtton_Click"></MenuItem>
<Separator></Separator>
<MenuItem Header="Delete" Name="DeleteButton" Click="DeleteButton_Click"></MenuItem>
Run Code Online (Sandbox Code Playgroud)
但是有两个问题:
问题是您将所有样式设置MenuItem为与子菜单相同,这导致了无限递归 - StackOverflow :-) 问题。下面这行是错误的:
<Style TargetType="MenuItem">
Run Code Online (Sandbox Code Playgroud)
因此,您可以在资源中创建此样式并通过其 x:Key 调用它:
<Style x:Key="SubMenuStyle">
<Setter Property="ItemsSource">
<Setter.Value>
<x:Array Type="FrameworkElement">
<MenuItem Header="Active" IsCheckable="True" IsChecked="{Binding Path=Active}"></MenuItem>
<Separator></Separator>
<MenuItem Header="Edit" Name="EditCustomMessageButton" Click="EditCustomMessageButton_Click" Style="{x:Null}"></MenuItem>
<MenuItem Header="Delete" Name="DeleteCustomMessageButton" Click="DeleteCustomMessageButton_Click" Style="{x:Null}"></MenuItem>
</x:Array>
</Setter.Value>
</Setter>
</Style>
<MenuItem Header="Custom Messages" ItemsSource="{Binding Path=CustomMessages}" ItemContainerStyle="{StaticResource SubMenuStyle}"...>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3734 次 |
| 最近记录: |