【问题标题】:How to get name of element with focus in WPF如何在WPF中获取焦点元素的名称
【发布时间】:2020-01-04 14:59:09
【问题描述】:

我正在构建一个按钮比 Sgt 更多的麻将游戏。胡椒乐队。通过显示相关按钮(图块)的背景来模拟图块的移动。我想利用 x:Name="button" 的使用,并且只有一次点击事件,而不是 200,但问题在于获取焦点按钮的名称。我可以获取具有焦点的元素,但无法访问 name 属性,如果可以的话,我会省去很多不雅的苦差事。这是我想做的事;

Private Sub b15_Click(sender As Object, e As RoutedEventArgs) Handles b15.Click
    Dim brush As Brush
    Dim vButton As Button
    Dim InputElement As IInputElement = Keyboard.FocusedElement
    vButton.Name = InputElement.name  '!! here's the problem !! 
    If vTog = 0 Then 'background brush transferred from
        brush = vButton.Background
        vButton.Background = Nothing
        vTog = 1
    Else 'background brush transferred to
        vButton.Background = brush
        vTog = 0
    End If
End Sub

也许我错过了一种获取按钮名称的简单方法,因此我可以直接在后面的代码中使用它。谢谢。

【问题讨论】:

标签: wpf vb.net


【解决方案1】:

我建议您了解有关 WPF 基础知识的更多信息。

与“常规”事件一样,WPF 已路由事件。看到你的点击处理程序的签名了吗?注意 Routedeventargs 而不是 eventargs?

那个点击事件是一个路由事件。

路由事件冒泡(在视觉树上)和/或隧道(在视觉树下)。 https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/routed-events-overview

由于这种机制,您可以在视觉树的更上方处理容器中按钮的单击事件。可以是网格、堆栈面板或窗口。

在处理程序中,将事件的原始来源转换为按钮,该按钮将具有 name 属性。

我用的是 c#,但是这方面的代码很少,如果你在使用它时遇到问题,那么你可以通过在线代码转换器来处理它。

标记:

        Title="MainWindow" 
        ButtonBase.Click="Window_Button_Click"
        >
    <StackPanel>
        <Button Name="b1"     Content="b1"/>
        <Button Name="b2" Content="b2"/>
        <Button Name="b3" Content="b3"/>
    </StackPanel>
</Window>

后面代码中的处理程序:

    private void Window_Button_Click(object sender, RoutedEventArgs e)
    { 
        Button btn = e.OriginalSource as Button;
        if(btn!=null)
        {
            Debug.WriteLine(btn.Name ?? "No Name for this button"); 
        }
    }

如果我用 f5 旋转它,当我单击它们时,我会看到每个单击按钮的名称输出到我的输出窗口。

顺便说一句。

我不清楚玩家点击了什么以及做了什么。

也许这可以以通用方式工作,每个按钮的数据上下文将是一个持有 x、y 位置或类似位置的视图模型。

【讨论】:

  • 这正是我想要做的,它完美地工作。要回答您的问题,当玩家单击按钮(图块)时,它会从该按钮中删除背景,然后当他再次单击未使用的图块时,背景会放置在那里,因此在游戏关卡中,它会移动图块从一个位置到另一个位置。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 2012-01-09
相关资源
最近更新 更多