Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
ComboBox - Darstellung des ausgewählten Items
redMars
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

ComboBox - Darstellung des ausgewählten Items

beantworten | zitieren | melden

Hallo zusammen,

ich habe eine ComboBox in der die Name einer Liste von Namen von einen UserControl auswählbar sein sollen. Das UserControl ist in meinem Fall hauptsächlich ein Canvas auf dem Objekte platziert werden können. Ich habe eine statische Liste dieser Controls:


private static ObservableCollection<VisuWindowUC> listWindows = new ObservableCollection<VisuWindowUC>();

public static ObservableCollection<VisuWindowUC> ListWindows
{
	get
	{
		return listWindows;
	}
}

Im XAML möchte ich nun in einer ComboBox die Namen der UserControls der Liste darstellen, das funktioniert auch so weit:

<ComboBox  VerticalAlignment="Top" HorizontalAlignment="Stretch"
                    ItemsSource="{Binding Source={x:Static da:VisuWindows.ListWindows}}" >
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding BasicProperties.Name}" />
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
</ComboBox>

Klappt man die ComboBox auf, stehen die Namen aufgelistet drin. So weit, so gut.

Wählt man nun einen Eintrag aus, wird aber nicht der Name angezeigt, sondern die visuelle Ansicht des UserControls, wie im Bild zu sehen ist.

Ich möchte allerdings ebenfalls nur den gewählten Namen anzeigen, kriegs aber irgendwie nicht gebacken...


Vielen Dank für eure Hilfe

redMars
Attachments
private Nachricht | Beiträge des Benutzers
tkrasinger
myCSharp.de - Member



Dabei seit:
Beiträge: 574
Herkunft: Enzesfeld (Niederösterreich)

beantworten | zitieren | melden

hm, liegt glaube ich an der Klasse die du verwendest. Hab das mal kurz so ausprobiert:
<StackPanel>
    <ComboBox x:Name="cmbItems" VerticalAlignment="Top" HorizontalAlignment="Stretch" ItemsSource="{Binding MyControls}" >
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
    <StackPanel>
        <Border x:Name="brd"/>
    </StackPanel>
</StackPanel>

public TestLabView()
{
    InitializeComponent();

    MyModel model = new MyModel();

    model.MyControls = new ObservableCollection<UIElement>();

    model.MyControls.Add(CreateBorder(Colors.Blue, "Blue"));
    model.MyControls.Add(CreateBorder(Colors.Red, "Red"));

    this.DataContext = model;
    cmbItems.SelectionChanged += new SelectionChangedEventHandler(cmbItems_SelectionChanged);
}

private void cmbItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    brd.Child = (UIElement)cmbItems.SelectedValue;
}

private static Border CreateBorder(Color color, string name)
{
    Border brd = new Border();
    brd.Name = name;
    brd.Width = 100;
    brd.Height = 200;
    brd.Background = new SolidColorBrush(color);
    return brd;
}

da wird bei der Auswahl eines Items der Text angezeigt. Evtl. könntest du auch mal probieren auf der Combobox den DisplayMemberPath zu setzen.
private Nachricht | Beiträge des Benutzers
redMars
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

beantworten | zitieren | melden

Hallo,

@tkrasinger: Danke für dein Ausprobieren...

Da es ja scheinbar, doch irgendwie zu funktionieren scheint, hab ich es auch nochmal ausprobiert. Ich hab mal 3 Varianten der ComboBox-Inhalte gegenübergestellt
1. Liste von Border-Objekten
2. Liste von UserControls (ein UserControl enthält dabei ein Border-Objekt)
3. Liste eines eigenen Controls (enthält im Template ebenfalls nur ein Border-Objekt)

Das verwunderliche Datei ist, dass die Variante 1 und 3 als Auswahl den gewünschten Namen anzeigt, die Variante 2 jedoch mit dem UserControl zeigt das UserControl an. Wie im Bild zu sehen ist, wird auch nicht das ganze UserControl angezeigt, sondern nur das was als Inhalt definiert ist, also die Border, denn die farbigen Ecken fehlen dabei.

Jetzt ist natürlich die Frage, was da im Hintergrund läuft und warum die Darstellung beim UserControl anders ist???

Wäre schön, wenn dazu jemand einen Tip oder gar eine Erläuterung hätte...

Vielen Dank
redMars
Attachments
private Nachricht | Beiträge des Benutzers
redMars
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

beantworten | zitieren | melden

Und hier zum eventuellen Nachvollziehen noch der zugehörige Quellcode zum Testprogramm...
Attachments
private Nachricht | Beiträge des Benutzers