Benutzer mit den meisten Antworten
ComboCheckBox on the fly erstellen

Frage
-
Hallo,
ich möchte eine ComboCheckbox per Button-Click erstellen lassen. Sie soll zum Beispiel folgenden Xaml-Item-Eintrag haben:
<ComboBoxItem>
<CheckBox Name="TeaCheckBox">
<TextBlock Text="Tea"></TextBlock>
</CheckBox>
</ComboBoxItem>Wie muss ich den Code-Behind Code modifizieren, um das zu erreichen:
cbx.Items.Add("Iced Tea");
Ich brauche also eine Möglichkeit die XAML-Verschachtelung an Items.add zu übergeben.
Gruß Andreas
Antworten
-
Hallo,
jeder XAML-Knoten hat eine Entsprechung im Codebehind. Entsprechend kannst du dir die Instanzen auch manuell zusammen bauen:
var tb = new TextBlock(); tb.Text = "Tea"; var cb = new CheckBox(); cb.Content = tb; var cbi = new ComboBoxItem(); cbi.Content = cb; cbx.Items.Add(cbi);
Oder aber etwas kompakter:cbx.Items.Add(new ComboBoxItem() { Content = new CheckBox() { Content = new TextBlock() { tb.Text = "Tea", }, }, });
Im allgemeinen ist es aber besser die ComboBox zu binden, dann kannst du einfach eine Auflistung im Codebehind/Model erweitern und die ComboBox aktualisiert sich selbstständig. Mehr zu Datenbindungen (ein sehr komplexes Thema) findest du hier.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Holger M. Rößler Sonntag, 12. Juli 2015 11:32
- Als Antwort markiert AndreasM2000 Sonntag, 12. Juli 2015 14:22
Alle Antworten
-
Hallo,
jeder XAML-Knoten hat eine Entsprechung im Codebehind. Entsprechend kannst du dir die Instanzen auch manuell zusammen bauen:
var tb = new TextBlock(); tb.Text = "Tea"; var cb = new CheckBox(); cb.Content = tb; var cbi = new ComboBoxItem(); cbi.Content = cb; cbx.Items.Add(cbi);
Oder aber etwas kompakter:cbx.Items.Add(new ComboBoxItem() { Content = new CheckBox() { Content = new TextBlock() { tb.Text = "Tea", }, }, });
Im allgemeinen ist es aber besser die ComboBox zu binden, dann kannst du einfach eine Auflistung im Codebehind/Model erweitern und die ComboBox aktualisiert sich selbstständig. Mehr zu Datenbindungen (ein sehr komplexes Thema) findest du hier.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Holger M. Rößler Sonntag, 12. Juli 2015 11:32
- Als Antwort markiert AndreasM2000 Sonntag, 12. Juli 2015 14:22
-
vielen Dank für die Antwort. ja mit der Datenbindung bin ich auch schon am kämpfen. Manches klappt, manches noch unklar. Zum Beispiel: wenn ich neue Klassen als zusätzliche Window.Resourcen in XAML bekannt manchen will, bekomme ich die Fehlermeldung, dass diese neuen Klassen im Namespace nicht vorhanden sind, obwohl sie jeweils dieselben Namespaceeinträge haben:
<Window x:Class="Binding3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Binding3"
mc:Ignorable="d"
Title="MainWindow" Height="659.75" Width="525">
<Window.Resources>
<local:Class2 x:Key="data2" />
<local:Class1 x:Key="data" />
<local:Class3 x:Key="data3" />
</Window.Resources>Klasse 2 und 3 sind nicht im Namespace bekannt. Klasse 1 ist im Namespace bekannt. Was muss ich tun, um alle 3 Klassen im Namespace bekannt zu machen? Warum ist Klasse 1 bekannt, ist umgekehrt gefragt...auch unklar...
Gruß Andreas
-
Hi Andreas,
schau mal im Visual Studio in die Klassenansicht, ob sie sich im richtigen Namensraum befinden und auch die Zugriffsmodifizierer ausreichend sind (z.B. public).--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks