WPF: не удается получить исходный код из ExecutedRoutedEventArgs - PullRequest
0 голосов
/ 28 апреля 2010

У меня проблема с получением исходного источника команды с помощью ExecutedRoutedEventArgs.

Я создаю простую разделенную кнопку, в которой под выделенной кнопкой появится меню при нажатии другой кнопки. Когда я щелкаю пункт меню в появившемся меню, запускается команда. Эта команда зарегистрирована на кнопке split. И идея состоит в том, чтобы получить доступ к пункту меню с помощью ExecutedRoutedEventsArgs.

Хорошо, теперь проблема. Если я выберу отображение всплывающего меню по умолчанию (IsOpen = "True") и щелкну один из элементов меню, я смогу получить доступ к источнику originals (таким образом, элементу меню) из ExecutedRoutedEventArgs - нет проблем. Однако, если я сначала нажму кнопку, чтобы отобразить меню, а затем щелкну по элементу меню, исходным источником команды будет кнопка вместо MenuItem!

Вот шаблон управления для кнопки split:

<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 запускает ShowMenuCommand на SplitButton, которая устанавливает свойство IsOpen в всплывающем окне в True.

Есть идеи, почему кнопка OK (после активации меню) является источником оригинала при нажатии на пункт меню?

Спасибо.

1 Ответ

0 голосов
/ 28 апреля 2010

Решением этой проблемы является использование свойства CommandParameter. Затем вы можете связать CommandParameter с самим MenuItem, а когда Command выполнен, вы можете получить MenuItem из параметра.

Примерно так должно работать:

<MenuItem Header="item1" 
          Command="usc:SplitButton.MenuItemClickCommand" 
          CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...