使用ExecutedRoutedEventArgs访问命令的原始来源时遇到问题。
我正在创建一个简单的分割按钮,其中一个菜单将出现在专用按钮下方,同时按下另一个按钮。当我在出现的菜单中单击一个menuitem时,会触发一个命令。此命令在splitbutton上注册。我们的想法是通过使用ExecutedRoutedEventsArgs来点击菜单项。
好的,现在问题了。如果我选择默认显示弹出菜单(IsOpen =“True”)并单击其中一个菜单项,我可以从ExecutedRoutedEventArgs获取原始资源(因此是menuitem) - 没问题。但是,如果我首先单击按钮显示菜单然后单击一个menuitem,命令的原始源将是按钮而不是MenuItem!
这是splitbutton的controltemplate:
<ControlTemplate TargetType="{x:Type usc:SplitButton}">
<StackPanel Orientation="Horizontal">
<Button Name="mybutton">
<StackPanel>
<Popup usc:SplitButton.IsPopup="True" IsOpen="True" Name="myPopup" PlacementTarget="{Binding ElementName=mybutton}" StaysOpen="False" Placement="Bottom">
<Border BorderBrush="Beige" BorderThickness="1">
<Menu Width="120">
<MenuItem Header="item1" Command="usc:SplitButton.MenuItemClickCommand" />
<MenuItem Header="item2" />
<MenuItem Header="item3" />
</Menu>
</Border>
</Popup>
<TextBlock Text="MySplitbutton" />
</StackPanel>
</Button>
<Button Content="OK" Command="usc:SplitButton.ShowMenuCommand" />
</StackPanel>
</ControlTemplate>
OK按钮在SplitButton上触发ShowMenuCommand,它将Popup上的IsOpen属性设置为True。
单击菜单项时,为什么OK按钮(激活菜单后)的原因是OriginalSource?
感谢。
答案 0 :(得分:0)
解决方法是使用CommandParameter
属性。然后,您可以将CommandParameter
绑定到MenuItem
本身,当执行Command
时,您可以从参数中获取MenuItem
。
这样的事情应该有效:
<MenuItem Header="item1"
Command="usc:SplitButton.MenuItemClickCommand"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>