在单击时获取代码的控件名称,wpf
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在单击时获取代码的控件名称,wpf相关的知识,希望对你有一定的参考价值。
我有一个用户控件,我想获得用户在此用户控件上单击的控件的名称。
下面提供了Usercontrol xaml:
<Grid Name="Grid1">
<ListView Name ="ListView1">
<listbox.resources>
<Datatemplate>
<Togglebutton Name="Button1">
</Togglebutton>
</Datatemplate>
</listbox.resources>
</Listview>
<Border Name="Border1">
<ContentControl>
</ContentControl>
</Border>
</Grid>
现在在我的代码后面,我写了:
this.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(mouseclicked);
private void mouseclicked(object sender, MouseButtonEventArgs e)
{
var source = e?.OriginalSource as FrameworkElement;
if (source != null)
{
var parent = source.Parent as FrameworkElement;
string name = string.Empty;
if (parent != null)
{
name = parent.Name;
}
else
{
name = source.Name;
}
//If clicked outside the usercontrol, then usercontrol should close down
if (!(name.Contains("Border1") || name.Contains("Grid1"))) //very strange values sometimes null or empty
{
//then do something
}
}
}
如何在代码隐藏中获取用户控件中使用的控件的名称?
答案
您已经在XAML中为表格,边框和列表视图指定了名称。您应该在代码隐藏中访问它,并检入[[mouseclicked事件,该事件位于鼠标上方。
private void mouseclicked(object sender, MouseButtonEventArgs e)
{
if (ListView1.IsMouseOver && Grid1.IsMouseOver)
{
MessageBox.Show($"List view clicked");
}
if (Border1.IsMouseOver && Grid1.IsMouseOver)
{
MessageBox.Show($"Border1 clicked");
}
if (Grid1.IsMouseOver)
{
MessageBox.Show($"Grid1 clicked");
}
}
这可能不是最好的方法,但是可以用来获取用户单击的控件的名称。
以上是关于在单击时获取代码的控件名称,wpf的主要内容,如果未能解决你的问题,请参考以下文章