Wpf 绑定自定义附加属性和OnSetPropertyCallback
窗口有绑定到集合的MenuItem,MenuItem有ItemTemplate,其中包含另一个使用绑定的带有附加属性的MenuItem:Wpf 绑定自定义附加属性和OnSetPropertyCallback,wpf,binding,Wpf,Binding,窗口有绑定到集合的MenuItem,MenuItem有ItemTemplate,其中包含另一个使用绑定的带有附加属性的MenuItem: <Menu Background="Transparent"> <MenuItem ItemsSource="{Binding SomeThings}" Header="Menu"> <MenuItem.ItemTemplate> <DataTem
<Menu Background="Transparent">
<MenuItem ItemsSource="{Binding SomeThings}" Header="Menu">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding MenuTitle}" WpfApplication30:MainWindow.KeyGesture="{Binding KeyGesture}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
调用OnSetKeyGestureCallback后,用户可以使用快捷方式执行操作。但OnSetKeyGestureCallback仅在打开菜单后调用。因此,在用户打开菜单之前,快捷方式不可用。如何在加载窗口或菜单后立即调用OnSetKeyGestureCallback?您的
菜单项的数据模板包含菜单项。因此,在可视化树中有两个MenuItem
s,一个是另一个的子项。子级将正确设置属性,但父级不会
如果需要在MenuItem
上指定属性,则应使用ItemContainerStyle
:
<MenuItem ItemsSource="{Binding SomeThings}" Header="Menu">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding MenuTitle}"/>
<Setter Property="MainWindow.KeyGesture" Value="{Binding KeyGesture}"/>
</Style>
</MenuItem>
</MenuItem>
这个问题不需要解决方案。为快捷方式创建了不同的实现。感谢您提供ItemContainerStyle提示!我甚至在DataTemplate中为MenuItem编写了MenuItem.Style,使其看起来不像嵌套在另一个模板中。现在我可以摆脱它了。但主要问题仍然存在。例如,如果我这样写:,则在打开菜单之前不会触发加载的事件。
<MenuItem ItemsSource="{Binding SomeThings}" Header="Menu">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding MenuTitle}"/>
<Setter Property="MainWindow.KeyGesture" Value="{Binding KeyGesture}"/>
</Style>
</MenuItem>
</MenuItem>
<MenuItem>
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding MenuTitle}"/>
<Setter Property="MainWindow.KeyGesture" Value="{Binding KeyGesture}"/>
</Style>
</MenuItem>
<MenuItem.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</MenuItem.ItemsPanel>
</MenuItem>