2017-05-18 1 views
0

Ich habe ein Kombinationsfeld von Checkboxen, die es dem Benutzer erlauben, mehrere Temperaturbänder auszuwählen. Wenn der Benutzer auf das Kontrollkästchen oder auf den Text direkt neben dem Kontrollkästchen klickt, werden die Kontrollkästchen korrekt überprüft und der Combobox-Text wird aktualisiert, um die ausgewählte Temperatur hinzuzufügen/zu entfernen. Wenn ich jedoch den Bereich meines Kombinationsfelds rechts neben dem Text einchecke, wird das Kontrollkästchen nicht umgeschaltet, und stattdessen erhalte ich Namespace-Text in meinem Kombinationsfeld. ComboBox TextComboBox von CheckBoxes prüft Element nicht, wenn Zeile geklickt wurde

Hier ist meine XAML

<ComboBox x:Name="cbDegrees" ItemsSource="{Binding m_DegreeValues}" Text="Degrees" IsEditable="True" IsReadOnly="True" Grid.Row="0" Grid.Column="0" Margin="5" Background="Gray" > 
       <ComboBox.ItemTemplate> 
        <DataTemplate> 
         <CheckBox Name="chkDegrees" Content="{Binding Name}" Checked="Degrees_CheckBox_Click" Unchecked="Degrees_CheckBox_Click" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"> 
         </CheckBox> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
</ComboBox> 

Ich mag würde die Checkbox gewechselt haben, wenn ich für die Temperatur überall in der Position klicken.

+0

ComboBox ist kein Allzweck-Dropdown-Button jeglicher Art setzt. Es ist ein Selektor, mit dem Sie Elemente aus einer Sammlung auswählen können. Wenn Sie möchten, können Sie ToggleButton und ein Popup einfach zusammenstellen und zusammenbinden. In Ihrem Popup legen Sie eine Liste von Kontrollkästchen. – Mishka

+0

Vielen Dank @Mishka, ich werde Ihren Ansatz als eine mögliche Lösung betrachten, aber ich habe bereits alle anderen Funktionen, die ich in meiner Combo-Box von Kontrollkästchen wünsche. Ich konzentriere mich nur darauf, diesen einen Fehler zu beheben, und andere haben eine hervorragende Arbeit geleistet, um das Problem, das ich habe, zu beschreiben und eine Lösung anzubieten, wie man es beheben kann. – TychoBrahe

+0

Ich bekomme es, es ist in Ordnung, ich bin nur über Sachen und das nervt mich. – Mishka

Antwort

1

Der Standard ComboBoxItem, die nicht gesetzt erzeugt wird, wird den gesamten verfügbaren Platz zu dehnen und zu füllen. Sie können dies sehen, wenn Sie Ihre ComboBox in etwas wie ein DockPanel mit seiner Hintergrund-Eigenschaft umbrechen.

<ComboBox.ItemTemplate> 
    <DataTemplate> 
     <DockPanel Background="CornflowerBlue"> 
      <CheckBox Name="chkDegrees" Content="{Binding Name}" .. /> 
     </DockPanel> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

es zu beheben, stellen Sie Ihren ComboBoxItem Stil, so dass es die HorizontalContentAlignment zu Stretch

<ComboBox.Resources> 
    <Style TargetType="{x:Type ComboBoxItem}"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    </Style> 
</ComboBox.Resources> 
+0

Danke Rachel. Ich schätze den Beispielcode, damit ich die tatsächliche Breite eines Kontrollkästchens im Dock-Bereich sehen konnte. Ihre Lösung funktioniert perfekt für mich. – TychoBrahe

1

Sie könnten eine ItemContainerStyle definieren, die die CheckBox Strecke horizontal macht:

<ComboBox x:Name="cbDegrees" ItemsSource="{Binding m_DegreeValues}" Text="Degrees" IsEditable="True" IsReadOnly="True" Grid.Row="0" Grid.Column="0" Margin="5" Background="Gray" > 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="ComboBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Name="chkDegrees" Content="{Binding Name}" Checked="Degrees_CheckBox_Click" Unchecked="Degrees_CheckBox_Click" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"> 
      </CheckBox> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
Verwandte Themen