2011-04-28 14 views
13

में एक और नियंत्रण पर ध्यान केंद्रित करने के लिए लेबल पर क्लिक करना मैंने लगभग एक साल तक डब्ल्यूपीएफ से ब्रेक लिया है और मैं इस साधारण समस्या से फंस गया हूं। मैं कसम खाता हूं कि क्लिक होने पर किसी अन्य नियंत्रण पर ध्यान केंद्रित करने के लिए लेबल को बताने का एक आसान तरीका था।डब्ल्यूपीएफ

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