2010-12-14 47 views
2

Lorsque vous faites des contrôles non modifiables, nous les affichons comme TextBox pour conserver un style cohérent. Le problème est qu'un ComboBox peut avoir n'importe quel type de données liant ainsi la propriété Text du ControlTemplate TextBox n'est pas aussi simple que d'utiliser SelectedItem.WPF - Accès au contrôle parent à l'intérieur d'un StyleTetter ControlTemplate

<Style TargetType="{x:Type ComboBox}"> 
     <Style.Triggers> 
      <Trigger Property="IsReadOnly" Value="True"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <TextBox Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}, Path=????, Converter={StaticResource ResourceKey=ComboToTextConverter}, UpdateSourceTrigger=PropertyChanged}" /> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

L'idée que j'ai est d'utiliser un Converter et d'envoyer le tout ComboBox il peut être manipulé par le code Converter. Est-ce qu'il y a un moyen de faire ça?

Toutes les autres suggestions sont les bienvenues!

+0

Avez-vous déjà trouvé une solution? – DRapp

Répondre

2

vous devez utiliser les SelectedValue et SelectedValuePath propriétés:

<Style TargetType="ComboBox" x:Key="cStyle"> 
<Style.Triggers> 
    <Trigger Property="IsReadOnly" Value="True"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="ComboBox"> 
      <TextBox Text="{Binding RelativeSource= 
        {RelativeSource TemplatedParent}, 
        Path=SelectedValue}" /> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Trigger> 
</Style.Triggers> 

et Heres votre ComboBox

<ComboBox Name="cbox" ItemsSource="{Binding}" 
     Style="{StaticResource cStyle}" 
     SelectedValuePath="SomeText" 
     DisplayMemberPath="SomeText" /> 

maintenant lorsque vous définissez la propriété IsReadOnly true sur le ComboBox, il se transforme en TextBox avec la valeur sélectionnée texte ts.