2010-04-28 51 views
0

我有一個問題,使用ExecutedRoutedEventArgs獲取命令的原始源代碼。WPF:無法從ExecutedRoutedEventArgs獲取原始源代碼

我正在創建一個簡單的分割按鈕,其中一個菜單將顯示在專用按鈕下方,另一個按鈕被按下。當我在出現的菜單中點擊一個菜單項時,一個命令被觸發。該命令在分割按鈕上註冊。這個想法是通過使用ExecutedRoutedEventsArgs來點擊菜單項。

好吧,現在的問題。如果我選擇默認顯示彈出式菜單(IsOpen =「True」),然後單擊其中一個菜單項,我可以從ExecutedRoutedEventArgs中獲得原始資源(因此菜單項) - 沒問題。但是,如果我第一次點擊按鈕來顯示菜單,然後單擊一個菜單項,命令的原始資源將成爲按鈕而不是MenuItem!

下面是該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> 

OK按鈕觸發的SplitButton,這在彈出的IsOpen屬性設置爲true的ShowMenuCommand。

任何想法爲什麼OK按鈕(在激活菜單後)是單擊菜單項時單擊的OriginalSource?

謝謝。

+0

你有沒有使用'ContextMenu',而不是'Menu'一個'Popup'內部的原因是什麼? – wpfwannabe 2010-04-28 09:54:05

回答

0

解決方法是使用CommandParameter屬性。然後,您可以將CommandParameter綁定到MenuItem本身,並且在執行Command時,您可以從參數中獲取MenuItem

像這樣的東西應該工作:

<MenuItem Header="item1" 
      Command="usc:SplitButton.MenuItemClickCommand" 
      CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>