我尝试获取元素的属性值,其中光标位于Tag
,MouseLeftButtonDown
或x:Name
等等。使用CommandBindings按 F10 时,始终会引发Event
:
XAML:
<Window.CommandBindings>
<CommandBinding Command="Open" Executed="Executesd"/>
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Key="F10" Command="Open"/>
</Window.InputBindings>
代码:
private void Executesd(object sender, ExecutedRoutedEventArgs e)
{
Point mo = Mouse.GetPosition(Window);
var TagName = Mouse.DirectlyOver;
MessageBox.Show("Mouselogic Open-Commands: " + mo.ToString() + " -> " + TagName);
}
使用DirectlyOver
我只能获得Control.Element
。这不完全是我想要的。
<TextBlock MouseLeftButtonDown="MaximizeToolbar" Tag="FolderNameOrWhatever">Test</TextBlock>
我没有使用Windows.Forms。使用Tag="FolderNameOrWhatever"
我想处理一个动作。当孩子找不到Tag
时,我也需要父母Tag
。
我发现谷歌没有找到适合我的问题,将元素attributsname设置为我的光标所在的值。
是的,有人可以帮忙吗?我是C#的新手。在JS中我可以解决它,但C#非常不同。答案 0 :(得分:0)
解决:
private void Executesd(object sender, ExecutedRoutedEventArgs e)
{
Point mo = Mouse.GetPosition((UIElement)sender);
FrameworkElement Happy = Mouse.DirectlyOver as FrameworkElement;
MessageBox.Show("Mouselogic: " + mo.ToString() + " -> " + Happy.Tag);
}
使用VisualTreeHelper的另一种方法是这样(不是完整代码):
.....
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(this); i++)
{
Visual VisualChild = (Visual)VisualTreeHelper.GetChild(this, i);
FrameworkElement Child = VisualChild as FrameworkElement;
MessageBox.Show("Tag " + i + ": "+ Child.Tag +", Name: "+ Child.Name);
}
.....