2011-04-28 7 views
13

He tomado un descanso de WPF durante aproximadamente un año y estoy perplejo por este simple problema. Juro que había una manera fácil de decirle a una etiqueta que se enfoque a otro control cuando se hace clic.Al hacer clic en una etiqueta para enfocar otro control en WPF

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

Cuando el usuario hace clic en "Etiquetar texto", quiero que el TextBox reciba el foco. es posible?

Respuesta

15

Usted debe hacer uso de la propiedad 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); 
    } 
} 

El punto de usar una etiqueta en el primer lugar en vez de un TextBlock es hacer uso de su asociativo funcionalidad, vea el reference on MSDN.

Sobre mi nota, hice una pregunta acerca de cómo obtener un clic real over here, si tiene curiosidad.

2

Encontré el código que solía usar para esto y pensé que lo compartiría en caso de que sea útil para cualquier otra persona.

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

Nota del [propiedad Target de etiquetas] (http://msdn.microsoft.com/en-us/library/system.windows.controls .label.target.aspx) puede permitirle hacer esto sin definir su propia propiedad de dependencia. –

+0

Buena llamada ... tienes razón. Actualizaré el código. –

1

no se puede hacer eso con la combinación de teclas de acceso directo

<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> 
Cuestiones relacionadas