Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clicking on a Label to focus another control in WPF

I have taken a break from WPF for about a year and I am stumped by this simple problem. I swear there was an easy way to tell a label to focus to another control when it is clicked.

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

When the user clicks on "Label Text" I want the TextBox to receive focus. Is this possible?

like image 560
Shaun Bowe Avatar asked Apr 28 '11 22:04

Shaun Bowe


2 Answers

You should make use of the Target property:

<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);
    }
}

The whole point of using a Label in the first place instead of a TextBlock is to make use of its associative functionality, see the reference on MSDN.

About my note, i asked a question about how to get a real click over here, if you are curious.

like image 115
H.B. Avatar answered Sep 28 '22 02:09

H.B.


I found the code I used to use for this and figured I would share it in case it is useful for anyone else.

public class LabelEx : Label
{
    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
    {
        if (Target != null)
        {
            Target.Focus();
        }
    }
}
like image 31
Shaun Bowe Avatar answered Sep 28 '22 02:09

Shaun Bowe