Laden...

ComboBox - Darstellung des ausgewählten Items

Erstellt von redMars vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.229 Views
R
redMars Themenstarter:in
41 Beiträge seit 2005
vor 12 Jahren
ComboBox - Darstellung des ausgewählten Items

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

T
574 Beiträge seit 2008
vor 12 Jahren

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.

R
redMars Themenstarter:in
41 Beiträge seit 2005
vor 12 Jahren

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

R
redMars Themenstarter:in
41 Beiträge seit 2005
vor 12 Jahren

Und hier zum eventuellen Nachvollziehen noch der zugehörige Quellcode zum Testprogramm...