Wpf 绑定自定义附加属性和OnSetPropertyCallback

Wpf 绑定自定义附加属性和OnSetPropertyCallback,wpf,binding,Wpf,Binding,窗口有绑定到集合的MenuItem,MenuItem有ItemTemplate,其中包含另一个使用绑定的带有附加属性的MenuItem: <Menu Background="Transparent"> <MenuItem ItemsSource="{Binding SomeThings}" Header="Menu"> <MenuItem.ItemTemplate> <DataTem

窗口有绑定到集合的MenuItem,MenuItem有ItemTemplate,其中包含另一个使用绑定的带有附加属性的MenuItem:

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