2011-04-28 4 views
13

나는 약 1 년 동안 WPF에서 휴식을 취했고 나는이 간단한 문제에 난처하지 않습니다. 클릭 할 때 다른 컨트롤에 집중하도록 레이블에 지시하는 쉬운 방법이 있습니다. 레이블을 클릭하여 WPF에서 다른 컨트롤을 초점 맞추기

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

사용자가 "레이블 텍스트"를 클릭

나는 텍스트 상자가 포커스를받을합니다. 이것이 가능한가?

답변

15

대상 속성을 이용해야한다 :

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

대신하는 TextBlock의 첫 번째 자리에 라벨을 사용하는 요점은 그 연관을 활용하는 것입니다 기능을 보려면 reference on MSDN을 참조하십시오.

내 메모에 대해 궁금한 경우 실제 클릭을 얻는 방법에 대한 질문이 over here입니다.

2

저는이 코드를 사용하여 코드를 찾았습니다. 다른 사람에게 유용 할 수 있도록이 코드를 공유했습니다.

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

참고 [레이블의 대상 속성 (http://msdn.microsoft.com/en-us/library/system.windows.controls와 .label.target.aspx)는 자신의 의존성 프로퍼티를 정의하지 않고도 이것을 할 수있게 해준다. –

+0

좋은 전화 .. 당신 말이 맞아요. 나는 코드를 업데이트 할 것이다. –

1

은 당신이 할 수없는 바로 가기 키 조합을

<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> 
관련 문제