2016-04-18 2 views
0

Ich stecke in diesem Problem fest. Ich habe eine Combobox in meiner Anwendung (im Code erstellt, nicht XAML); Ich habe es mit Kontrollkästchen gefüllt, weil ich ein Dropdown-Steuerelement mit Kontrollkästchen benötigt.WPF Combobox mit verschiedenen ausgewählten Artikel und Text

Jetzt brauche ich die Combobox Auswahl nicht, weil es bedeutungslos ist. Also wollte ich im Textteil der Kontrolle ein Label zeigen.

Gibt es eine Möglichkeit, dies zu tun? Hier ist ein minimales Beispiel:

myComboBox = new System.Windows.Controls.ComboBox(); 

foreach (var key in myDictionary.Keys) 
{ 
    System.Windows.Controls.CheckBox chk = new System.Windows.Controls.CheckBox(); 
    chk.Content = key; 
    chk.SetBinding(System.Windows.Controls.CheckBox.IsCheckedProperty, new Binding() { Mode = BindingMode.TwoWay, Source = this, Path = new PropertyPath("myDictionary[" + key + "]") }); 

    RoutedEventHandler ev = (sender, e) => 
    { 
     // Do something when a checkbox is changed 
    }; 
    chk.Checked += ev; 
    chk.Unchecked += ev; 

    myComboBox.Items.Add(chk); 
} 

diese Weise, wenn der Benutzer auf eine Checkbox klickt der Checkbox Inhalt im Textfeld angezeigt wird.

ich es auch das Hinzufügen modifizierte

myComboBox.SelectionChanged += (sender, jender) => 
{ 
    myComboBox.SelectedItem = null; 
}; 

Auf diese Weise kein Text immer angezeigt wird. Aber .. Was wenn ich eine feste Zeichenkette in den Textteil der Combobox schreiben wollte?

Vielen Dank

+0

Haben Sie darüber nachgedacht, die WPF-Toolkit? Sie haben eine Kontrolle, die genau das ist, was Sie beschreiben: https://wpftoolkit.codeplex.com/wikipage?title=CheckComboBox Sonst könnten Sie ItemTemplate verwenden, glaube ich. – Joe

+0

@Joe Danke für Ihren Kommentar. Wie auch immer, ich habe das WPF Toolkit nie in Betracht gezogen. Vielen Dank. Dieses Steuerelement verkettet jedoch den Inhalt der Kontrollkästchen zusammen. Ich brauchte eine feste Zeichenfolge, um dort anstelle des Kontrollkästchens Inhalte anzuzeigen. – frarugi87

+0

Ah, tut mir leid, ich dachte, das war, was Sie wollten. – Joe

Antwort

1

Wow, das ist ein echter Schmerz. Ich nahm an, dass es ziemlich einfach wäre, aber es stellt sich heraus, dass es nicht so ist. Ich nahm an, dass Sie eine Vorlage für den Inhalt, der in der Combobox angezeigt wird, und separat für den Inhalt, der in der Dropdownliste angezeigt wird, festlegen können. Sie können, aber Sie haben einen Inhaltsselektor zu verwenden:

How to display a different value for dropdown list values/selected item in a WPF ComboBox?

Dies ist der richtige Weg, es zu tun. Wollen Sie jedoch nur ein statisches Etikett/String angezeigt bekommen? Wenn ja, dann ist es wahrscheinlich viel, viel einfacher, nur überlagern, dass über das, was Sie bereits in einem Raster wie diese bekommen:

<Grid> 
     <ComboBox x:Name="Checkbox" SelectionChanged="Checkbox_SelectionChanged"> 
      <ComboBox.Items> 
       <CheckBox Content="Test1"/> 
       <CheckBox Content="Test2"/> 
       <CheckBox Content="Test3"/> 
      </ComboBox.Items> 
     </ComboBox> 
     <TextBlock IsHitTestVisible="False" Text="My Text" VerticalAlignment="Center" Margin="5"/> 
    </Grid> 

Einstellung der Textblock unsichtbar hit-Tests bedeutet, dass sie nur an die weitergegeben Combobox:

enter image description here

+0

Vielen Dank für Ihre Hilfe. Dies war eine andere Lösung, die ich ausprobierte, aber nicht über den Hit-Test wusste, also habe ich sie verworfen;) Am Ende kam ich ein weiteres Element in der Combobox (mit 'myComboBox.Items.Add (" My Text ");' vorher die 'foreach'). Es zeigt ein anderes Element an, aber da es in einer anderen Farbe ist, sieht es wie eine Überschrift aus ... Jedenfalls behalte ich diese Lösung im Hinterkopf – frarugi87