C# WPF:Can';无法从ExecutedRoutedEventArgs访问原始源

C# WPF:Can';无法从ExecutedRoutedEventArgs访问原始源,c#,.net,wpf,C#,.net,Wpf,使用ExecutedRoutedEventArgs访问命令的原始源时遇到问题 我正在创建一个简单的splitbutton,当按下另一个按钮时,其中一个菜单将显示在一个专用按钮的下方。当我单击出现菜单中的菜单项时,会触发一个命令。此命令在splitbutton上注册。我们的想法是通过使用ExecutedRoutedEventsArgs来点击菜单项 好的,现在问题来了。如果我选择在默认情况下显示弹出菜单(IsOpen=“True”),并单击其中一个菜单项,我可以从已执行的RoutedEventArg

使用ExecutedRoutedEventArgs访问命令的原始源时遇到问题

我正在创建一个简单的splitbutton,当按下另一个按钮时,其中一个菜单将显示在一个专用按钮的下方。当我单击出现菜单中的菜单项时,会触发一个命令。此命令在splitbutton上注册。我们的想法是通过使用ExecutedRoutedEventsArgs来点击菜单项

好的,现在问题来了。如果我选择在默认情况下显示弹出菜单(IsOpen=“True”),并单击其中一个菜单项,我可以从已执行的RoutedEventArgs访问原始源(因此菜单项)-没问题。但是,如果我先单击按钮以显示菜单,然后单击菜单项,则命令的原始源将是按钮而不是菜单项

以下是splitbutton的控件模板:

<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}}"/>

您是否有理由不在
弹出窗口中使用
上下文菜单
而不是
菜单