gpt4 book ai didi

c# - PreviewMouseDown 路由到边框/文本 block 而不是按钮

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:35 27 4
gpt4 key购买 nike

我试图在单击按钮时访问按钮的文本。所有按钮均由数据模板创建。这些按钮位于 UniformGrid 内,而该 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>

然后在我后面的代码中(不包括具有绑定(bind)内容的我的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 不是按钮,而是 textblockborder。我假设这是由于 textblockborder 是被点击按钮的特定部分,因为 PreviewMouseDown 跟踪路径到最小据我了解的子元素。

我为 keyword 赋值的行也抛出一个 NullRefernceExcpetion

我试过使用 MouseDown 代替,但是当我尝试时该方法甚至没有运行。

有什么想法吗?感谢您的宝贵时间。

最佳答案

您可以将 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);
}

关于c# - PreviewMouseDown 路由到边框/文本 block 而不是按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52348034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com