2016-10-20 3 views
0

ich eine ComboBox, die ich als Templat haben wie folgt aussehen:WPF: Prevent ComboBox von Anzeigen ausgewählte Element

enter image description here

Hier ist das XAML für dieses ComboBox:

<ComboBox Name="StateInclusionRules_ComboBox" 
      ItemsSource="{Binding StateInclusionRules}" 
      Height="25" 
      Width="155" 
      Margin="0" 
      Grid.Column="7"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" 
         Margin="0"> 
       <Label Content="{Binding State}" 
         Margin="0,0,0,0" 
         Width="30" /> 
       <CheckBox IsChecked="{Binding StateTax}" 
          Margin="20,0,0,0"/> 
       <CheckBox IsChecked="{Binding StateChildSupport}" 
          Margin="30,0,0,0"/> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Gibt es eine Möglichkeit, zu verhindern, dass der ausgewählte Artikel in ComboBoxContentPresenter angezeigt wird (der rot umrandete Bereich, dh der Bereich, den Sie sehen, wenn der ComboBox geschlossen ist)?

+0

@jstreet Kein Glück, ich habe auch versucht Einstellung SelectedItem = "{x: Null}" & SelectedValue = "- 1" ohne Erfolg. Wenn Sie einen dieser Werte festlegen, werden die Kontrollkästchen im Dropdown-Menü deaktiviert. – BrianKE

+0

Mögliches Duplikat von [Kann ich für das ausgewählte Element in einer WPF-ComboBox eine andere Vorlage verwenden als für die Elemente im Dropdown-Feld?] (Http://stackoverflow.com/questions/4672867/cani-i-use-a- verschiedene-Vorlage-für-die-ausgewählte-Artikel-in-a-wpf-Combobox-als-für) – Funk

+0

[Eine andere Möglichkeit] (http:// Stackoverflow.com/a/39395482/4838058), um dies zu behandeln. – Funk

Antwort

1

Zuerst benötigen Sie 2 DataTemplates, 1 für den ausgewählten Artikel und 1 für den Dropdown-Artikel.

Die ausgewählten werden wir leer lassen, weil dies Ihre Anforderung ist. Das Drop-Down-Menü DataTemplate enthält genau das gewünschte DataTemplate. Wenn Element ausgewählt ist ein Datatrigger wird es Schablone auf die SelectedTemplate ändern, etwa so:

<Window.Resources> 

    <DataTemplate x:Key="DropDownItemTemplate" DataType="wpfApplication1:ItemSourceModel"> 
     <StackPanel Orientation="Horizontal" 
        Margin="0"> 
      <Label Content="{Binding Value}" 
        Margin="0,0,0,0" 
        Width="30" /> 
      <CheckBox IsChecked="{Binding Value}" 
         Margin="20,0,0,0"/> 
      <CheckBox IsChecked="{Binding Value}" 
         Margin="30,0,0,0"/> 
     </StackPanel> 
    </DataTemplate> 

    <DataTemplate x:Key="SelectionBoxTemplate"> 

    </DataTemplate> 

    <DataTemplate x:Key="ComboBoxTemplate"> 
     <ContentPresenter x:Name="Presenter" 
       Content="{Binding}" 
       ContentTemplate="{StaticResource DropDownItemTemplate}" /> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,ComboBoxItem,1}}" Value="{x:Null}"> 
       <Setter TargetName="Presenter" Property="ContentTemplate" Value="{StaticResource SelectionBoxTemplate}" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</Window.Resources> 

und stellen Sie Ihre ComboBox mit dem ComboBoxTemplate:

<ComboBox Name="StateInclusionRules_ComboBox" 
     ItemsSource="{Binding YourItemSource}" ItemTemplate="{StaticResource ComboBoxTemplate}" 
     Height="25" 
     Width="155" 
     Margin="0" 
     /> 
Verwandte Themen