C# WPF:Can';无法从ExecutedRoutedEventArgs访问原始源
使用ExecutedRoutedEventArgs访问命令的原始源时遇到问题 我正在创建一个简单的splitbutton,当按下另一个按钮时,其中一个菜单将显示在一个专用按钮的下方。当我单击出现菜单中的菜单项时,会触发一个命令。此命令在splitbutton上注册。我们的想法是通过使用ExecutedRoutedEventsArgs来点击菜单项 好的,现在问题来了。如果我选择在默认情况下显示弹出菜单(IsOpen=“True”),并单击其中一个菜单项,我可以从已执行的RoutedEventArgs访问原始源(因此菜单项)-没问题。但是,如果我先单击按钮以显示菜单,然后单击菜单项,则命令的原始源将是按钮而不是菜单项 以下是splitbutton的控件模板:C# WPF:Can';无法从ExecutedRoutedEventArgs访问原始源,c#,.net,wpf,C#,.net,Wpf,使用ExecutedRoutedEventArgs访问命令的原始源时遇到问题 我正在创建一个简单的splitbutton,当按下另一个按钮时,其中一个菜单将显示在一个专用按钮的下方。当我单击出现菜单中的菜单项时,会触发一个命令。此命令在splitbutton上注册。我们的想法是通过使用ExecutedRoutedEventsArgs来点击菜单项 好的,现在问题来了。如果我选择在默认情况下显示弹出菜单(IsOpen=“True”),并单击其中一个菜单项,我可以从已执行的RoutedEventArg
<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>
“确定”按钮在SplitButton上触发ShowMenuCommand,将弹出窗口上的IsOpen属性设置为True
你知道为什么单击菜单项时OK按钮(激活菜单后)是原始源吗
谢谢。解决方法是使用
CommandParameter
属性。然后可以将命令参数
绑定到菜单项
本身,执行命令
时,可以从参数中取出菜单项
像这样的方法应该会奏效:
<MenuItem Header="item1"
Command="usc:SplitButton.MenuItemClickCommand"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
您是否有理由不在
弹出窗口中使用上下文菜单
而不是菜单
?