2012-09-26 13 views
7

के साथ ट्रिगर मेरे पास WPF में कुछ टेक्स्ट बॉक्स और रेडियो बटन का संग्रह है। मैं ट्रिगर का उपयोग ओली एक रेडियो बटन की इस्कैक्ड संपत्ति को सेट करने के लिए करना चाहता हूं, जिसका कोई नाम है यदि कोई टेक्स्ट बॉक्स फोकस करता है। मैं कुछ उदाहरणों की जांच करता हूं लेकिन मुझे वह चीज़ नहीं मिल सका जो मैं ढूंढ रहा हूं। याद रखें, हम एमवीवीएम पैटर्न का उपयोग कर रहे हैं और पीछे कोई कोड नहीं है।लक्ष्य नाम

मैं निम्नलिखित कोड की कोशिश की और इस संकलन त्रुटि है:

टार्गेटनाम संपत्ति एक शैली सेटर

<UserControl.Resources> 
      <Style x:Name="myTest" TargetType="TextBox"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="RadioButton.IsChecked" Value="True" TargetName="myRadioButton"></Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </UserControl.Resources> 

मैं अन्य पदों पढ़ा है और DataTrigger समस्या को ठीक पर सेट नहीं किया जा सकता है।

<Style x:Name="myTest2" TargetType="RadioButton" > 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsFocused, ElementName=myTextBox}" Value="True"> 
      <Setter Property="IsChecked" Value="True" ></Setter> 
     </DataTrigger>  
    </Style.Triggers> 
</Style> 
+1

यह उपयोगी मैं आप हमें कम से कम XAML कोड दिखा सकता है हो सकता है;) –

+0

MSDN से 'आप जहां सेटर संग्रह (संग्रह के दायरे के भीतर किसी भी तत्व के नाम के इस होटल में सेट कर सकते हैं कि यह सेटर का हिस्सा है) लागू किया गया है। यह आम तौर पर एक नामित तत्व होता है जो इस सेटटर वाले टेम्पलेट के भीतर होता है। लक्ष्य नाम का उपयोग ज्यादातर नियंत्रण टेम्पलेट्स के भीतर किया जाता है, न केवल शैलियों के भीतर, जैसे कि आप इसका उपयोग करने का प्रयास कर रहे हैं। –

+2

डब्ल्यूपीएफ ट्रिगर, शैलियों और टेम्पलेट्स के चौराहे पर किसी और को लगातार इस तरह की समस्या है? स्टाइल सेटर में TargetName का उपयोग नहीं कर सकता। ट्रिगर संग्रह में केवल EventTriggers हो सकते हैं, जब तक कि यह शैली में न हो। ओह, यह नियंत्रण केवल एक नियंत्रण टेम्पलेट में काम करता है, डेटा टेम्पलेट नहीं ... – user1454265

उत्तर

1

मुझे लगता है कि आप गॉटफोकस इवेंट की तलाश में हैं।

XAML में:

<TextBox x:Name="textBox1" GotFocus="tb_GotFocus"/> 
<TextBox x:Name="textBox2" GotFocus="tb_GotFocus"/> 
<TextBox x:Name="textBox3" GotFocus="tb_GotFocus"/> 
<RadioButton x:Name="myRadioButton"/> 

फिर अपने सी # में अपने ईवेंट हैंडलर कुछ इस

private void tb_GotFocus(object sender, RoutedEventArgs e) 
{ 
    myRadioButton.IsChecked = true; 
} 

की तरह लग रहे बक्सें के किसी भी यह RadioButton नामित myRadioButton की जाँच करेगा ध्यान केंद्रित हो जाता है हो सकता है।

+2

ठीक है, मैं आपको बताना भूल जाता हूं कि हम एमवीवीएम पर मुकदमा कर रहे हैं और पीछे कोई कोड नहीं है। – AustinTX

1

MSDN से:

You can set this property to the name of any element within the scope of where the setter collection (the collection that this setter is part of) is applied. This is typically a named element that is within the template that contains this setter.

TargetName ज्यादातर और नियंत्रण टेम्पलेट्स के भीतर प्रयोग किया जाता है नहीं बस शैलियों के भीतर आप इसे उपयोग करने के लिए प्रयास कर रहे हैं की तरह। आप क्या कर सकते हैं RadioButton के IsChecked डीपी IsMouseOverTextBox के डीपी को बांधना है।

1

एक ControlTemplate बनाएं और प्रत्येक RadioButton तत्व को ट्रिगर के रूप में संबंधित पाठ बॉक्स प्रदान करने के लिए

<ControlTemplate.Triggers> 
    <Trigger Property="HasText" Value="True"> 
     <Setter Property="Visibility" TargetName="LabelText" Value="Hidden" /> 
    </Trigger> 
</ControlTemplate.Triggers> 
0

लिखें शैलियों ControlTemplate.Triggers करने के लिए अपने ट्रिगर जोड़ें। निम्नलिखित 3 टेक्स्टबॉक्स & 3 रेडियोबटन के लिए एक उदाहरण है।

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <TextBox x:Name="txtBox0" Grid.Row="0"/> 
    <TextBox x:Name="txtBox1" Grid.Row="1"/> 
    <TextBox x:Name="txtBox2" Grid.Row="2"/> 

    <StackPanel Grid.Row="3" Orientation="Horizontal"> 
     <RadioButton GroupName="grp1" Content="txt1"> 
      <RadioButton.Style> 
       <Style TargetType="RadioButton"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsFocused, ElementName=txtBox0}" Value="True"> 
          <Setter Property="IsChecked" Value="True"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RadioButton.Style> 
     </RadioButton> 
     <RadioButton GroupName="grp1" Content="txt2"> 
      <RadioButton.Style> 
       <Style TargetType="RadioButton"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsFocused, ElementName=txtBox1}" Value="True"> 
          <Setter Property="IsChecked" Value="True"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RadioButton.Style> 
     </RadioButton> 
     <RadioButton GroupName="grp1" Content="txt3"> 
      <RadioButton.Style> 
       <Style TargetType="RadioButton"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsFocused, ElementName=txtBox2}" Value="True"> 
          <Setter Property="IsChecked" Value="True"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RadioButton.Style> 
     </RadioButton> 
    </StackPanel> 
</Grid> 
संबंधित मुद्दे