2013-05-27 1 views
1

J'ai un combobox avec un tas de valeurs dedans. Je veux changer la largeur de la combobox quand "Liste" est sélectionné. Voici mon xaml actuel:WPF Combobox ne pas redimensionner

<ComboBox Name="DataTypeSelector" ItemsSource="{Binding ElementName=DataItemsBuildWindow, Path=DataContext.Types}" SelectedValue="{Binding DataType}" HorizontalAlignment="Stretch" Width="160"> 
    <ComboBox.Style> 
     <Style TargetType="ComboBox"> 
      <Style.Triggers> 
       <DataTrigger Value="List" Binding="{Binding SelectedValue, ElementName=DataTypeSelector, Converter={StaticResource ToStringConverter}}"> 
        <Setter Property="Width" Value="80" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.Style> 
</ComboBox> 

Cela ne fonctionne pas pour une raison quelconque.

Si je change le Setter à ceci:

<Setter Property="Visibility" Value="Hidden" /> 

Ensuite, la zone de liste déroulante est caché lorsque "Liste" est sélectionnée. Pourquoi ne fonctionne-t-il pas pour la largeur?

+2

Dans WPF, vous ne configurez généralement pas votre interface graphique en fournissant une largeur ou une hauteur fixe. Est-ce que cela fonctionne quand vous venez de définir le ComboBox à 80 depuis le début? Je soupçonne que votre mise en page ne change tout simplement pas lorsque vous définissez la largeur. – nvoigt

Répondre

5

Une propriété qui est explicitement défini sur un élément (ici: Width="160") va remplacer tous les styles. Vous devez également déplacer cette largeur par défaut (160) dans votre style:

<ComboBox Name="DataTypeSelector" 
      ItemsSource="{Binding ElementName=DataItemsBuildWindow, Path=DataContext.Types}" 
      SelectedValue="{Binding DataType}" 
      HorizontalAlignment="Stretch" > 
    <ComboBox.Style> 
     <Style TargetType="ComboBox"> 
      <Setter Property="Width" Value="160" /> 
      <Style.Triggers> 
       <DataTrigger Value="List" Binding="{Binding SelectedValue, ElementName=DataTypeSelector, Converter={StaticResource ToStringConverter}}"> 
        <Setter Property="Width" Value="80" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.Style> 
</ComboBox> 
+0

Merci! Cela a fonctionné :) – VARAK

Questions connexes