Нажатие на ярлык для фокусировки другого элемента управления в WPF

Я сделал перерыв с WPF около года, и я смущен этой простой проблемой. Клянусь, был простой способ сказать ярлыку сосредоточиться на другом элементе управления, когда он щелкнут.

 <StackPanel>
    <Label Target="TextBox1">Label Text</Label>
    <TextBox Name="TextBox1" />
</StackPanel>

Когда пользователь нажимает "Текст ярлыка", я хочу, чтобы TextBox получал фокус. Возможно ли это?

Ответ 1

Вы должны использовать свойство Target:

<Label Content="_Stuff:" Target="{x:Reference TextBox1}"
       MouseLeftButtonUp="Label_MouseLeftButtonUp"/>
<TextBox Name="TextBox1" />
private void Label_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (e.ClickCount == 1) //Note that this is a lie, this does not check for a "real" click
    {
        var label = (Label)sender;
        Keyboard.Focus(label.Target);
    }
}

В первую очередь использование Label вместо TextBlock заключается в использовании его ассоциативной функциональности, см. ссылку здесь, если вам интересно.

Ответ 2

Я нашел код, который я использовал для этого, и решил, что я поделился бы им, если он будет полезен для кого-либо еще.

public class LabelEx : Label
{
    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
    {
        if (Target != null)
        {
            Target.Focus();
        }
    }
}

Ответ 3

Вы не можете сделать это с помощью комбинации клавиш быстрого доступа

    <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Label Target="{Binding ElementName=textbox1}" Content="_Name"/>
    <TextBox Name="textbox1" Height="25" Grid.Column="1" VerticalAlignment="Top"/>
</Grid>