gpt4 book ai didi

.net - WPF XAML - 带有 ItemSource 和子菜单项的 MenuItem

转载 作者:行者123 更新时间:2023-12-02 00:46:05 27 4
gpt4 key购买 nike

我在上下文菜单中有一个 MenuItem,我想使用 ItemSource 为列表中的每个项目生成子 MenuItem。每个生成的项目还应该具有子菜单项“事件”(可检查)、“编辑”和“删除”。

Custom Messages
-Custom Message 1
-Active
-Edit
-Delete
-Custom Message 2
-Active
-Edit
-Delete
-Custom Message 3
-Active
-Edit
-Delete

以下 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>

但是有两个问题:

  1. “编辑”和“删除”似乎以一种隐秘的方式表现,因为它们似乎都有子菜单,并且随后在将鼠标悬停在上面时抛出异常: Sub Menu Exception

  2. 通过在“编辑”和“删除”上设置 ItemSource="{x:Null}"可以解决上述问题,但事件行为很奇怪。单击“删除”不会执行任何操作,而单击“编辑”会触发“编辑”按钮单击事件,然后触发“删除”按钮单击事件,然后单击“添加”按钮单击事件(该事件甚至不是其他两个按钮的同级事件)。

最佳答案

问题是您将所有 MenuItem 的样式设置为与子菜单相同,这导致了无限递归 - StackOverflow :-) 问题。以下行是错误的:

<Style TargetType="MenuItem">

因此,您可以在资源中创建此样式并通过其 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}"...>

关于.net - WPF XAML - 带有 ItemSource 和子菜单项的 MenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33933764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com