2011-06-07 6 views
10
में DataTemplate के लिए शैली ट्रिगर लागू करने के लिए

मुझे मिल गया है निम्नलिखित ..कैसे WPF

<ComboBox Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" ItemsSource="{Binding ShipperAddresses}" Text="{Binding ShipperAddress}" Margin="85,2,0,2"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBox AcceptsReturn="True" Width="200" Height="100"/> 
      <DataTemplate.Resources> 
       <Style TargetType="{x:Type TextBox}"> 
        <Setter Property="IsReadOnly" Value="True"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=Tag}" Value="False"/> 
        </Style.Triggers> 
        </Setter> 
       </Style> 
      </DataTemplate.Resources> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

समस्या यह है कि आप एक Style.Trigger की तरह मैं एक DataTemplate के अंदर करने के लिए कोशिश कर रहा हूँ लागू नहीं कर सकते । तो मेरा सवाल यह है कि आप एक ट्रिगर कैसे लागू करेंगे, ताकि डेटा टेम्पलेट पर एक संपत्ति माता-पिता के आधार पर बदल जाए?

अंतिम समाधान:

मैं क्या सौविक मुझे दिया है और यह तय के बाद से वहाँ कुछ समस्याएं थीं लिया। अंतिम परिणाम यहां दिया गया है।

<ComboBox Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" ItemsSource="{Binding ShipperAddresses}" Text="{Binding ShipperAddress}" DisplayMemberPath="Value" Margin="85,2,0,2"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBox AcceptsReturn="True" Width="200" Height="100" Text="{Binding Path=Value}"/> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=IsEditable}" Value="False"> 
          <Setter Property="IsEnabled" Value="False"/> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
      <ComboBox.Resources> 
       <Style TargetType="{x:Type ComboBox}"> 
        <Setter Property="IsEditable" Value="True"/> 
        <Style.Triggers> 
         <Trigger Property="IsDropDownOpen" Value="True" > 
          <Setter Property="IsEditable" Value="False"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 

      </ComboBox.Resources> 

उत्तर

8

Have DataTemplate शैली ट्रिगर के बजाय ट्रिगर:

<ComboBox Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" ItemsSource="{Binding ShipperAddresses}" Text="{Binding ShipperAddress}" Margin="85,2,0,2"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox AcceptsReturn="True" Width="200" Height="100"/> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=Tag}" Value="False"> 
          <Setter Property="IsEnabled" Value="False"/> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 
+0

पर्याप्त बंद (मेरे पूर्वज एक combobox नहीं एक groupbox .. था और मेरे लिए मूल्य का टैग में कुछ नहीं था) –

+0

खेद है कि मैं गया था इसे मेरे एनवी में परीक्षण करना और पोस्ट करने से पहले ग्रुपबॉक्स और टैग चीज को हटाना भूल गया। हैप्पी है कि यह आपके लिए काम किया :) –