PreviewMouseDown Маршрутизация к границе / текстовому блоку вместо кнопки - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь получить доступ к тексту кнопки, когда нажимаю на нее. Все кнопки создаются шаблоном данных. Кнопки находятся внутри UniformGrid, который находится внутри ItemsControl:

<ItemsControl x:Name="uniformControl">
     <ItemsControl.ItemsPanel>

        <ItemsPanelTemplate>
           <UniformGrid MouseDown="Button_PreviewMouseDown">
           </UniformGrid>
        </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>

     <ItemsControl.ItemTemplate>
        <DataTemplate>
           <Button Content="{Binding}"/>
        </DataTemplate>
     </ItemsControl.ItemTemplate>
  </ItemsControl>

Тогда в моем коде позади (мой Operations класс, который содержит связывающее содержимое, не включен):

public MainWindow()
{
    InitializeComponent();
    uniformControl.PreviewMouseDown += new MouseButtonEventHandler(Button_PreviewMouseDown);

    uniformControl.ItemsSource = Operations.operations;
}

private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var clickedElement = e.OriginalSource;
    Debug.WriteLine(clickedElement);

    string keyword = (e.Source as Button).Content.ToString();
    Debug.WriteLine(keyword);
}

Хотя вместо OriginalSource, являющегося кнопкой, это либо textblock, либо border. Я предполагаю, что это связано с тем, что textblock и border являются определенной частью нажатой кнопки, поскольку PreviewMouseDown отслеживает путь к наименьшему дочернему элементу из того, что я понимаю.

Строка, в которой я присваиваю значение keyword, также выдает NullRefernceExcpetion.

Я пытался использовать MouseDown, но метод даже не запускался, когда я пытался это сделать.

Есть идеи? Спасибо за ваше время.

1 Ответ

0 голосов
/ 15 сентября 2018

Вы можете просто использовать событие Button.Click как прикрепленное событие на вашем UniformGrid, например. как это:

<UniformGrid Button.Click="Button_Click">
</UniformGrid>

И затем получить доступ к кнопке, используя OriginalSource:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var clickedElement = e.OriginalSource;
    Debug.WriteLine(clickedElement);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...