WPF:如何使文本块触发按键事件?

5

TextBlock有KeyDown和KeyUp事件,但从未触发。 有办法让它发生吗? 我只需要检测是否按下任何键。


如果您的TextBlock获得了键盘焦点,那么将触发KeyDown和KeyUp事件。 - stukselbax
我找不到TextBlock的KeyboardFocus。你是指设置Focusable = true然后调用textBlock.Focus()吗? - newman
1个回答

6

首先,您需要将TextBlock的Focusable属性设置为True。这样可以使Tab键定位到该项,但不能通过单击来选择它。但如果您处理MouseDown事件,可以手动将焦点设置到TextBlock。

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid >
       <TextBlock Name="tb1"  Height="30" Width ="100" IsEnabled="True"  Focusable="True" KeyDown="tb1_KeyDown" MouseDown="tb1_MouseDown">Hello World</TextBlock>
    </Grid>
</Window>

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void tb1_KeyDown(object sender, KeyEventArgs e)
    {
        tb1.Background = Brushes.Blue;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        tb1.Focus();
    }

    private void tb1_MouseDown(object sender, MouseButtonEventArgs e)
    {
        tb1.Focus();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接