XAML 如何在wpf中使ListBox显示不同的元素(位于列表中)

f1tvaqid  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(125)

假设我有一个包含一些元素和文本的列表:

public MainWindow()
     {
         InitializeComponent();

         TextBlock t = new TextBlock();
         t.Text = "Hello World!";

         Ellipse e = new Ellipse();
         e.Width = 100;
         e.Height = 100;
         e.Fill = new SolidColorBrush(Colors.Yellow);

         Rectangle r = new Rectangle();
         r.Width = 70;
         r.Height = 40;
         r.Fill = new SolidColorBrush(Colors.Blue);

         List<UIElementItem> items = new List<UIElementItem>();
         items.Add(new UIElementItem() { uiElement = t, Text = "This is a TextBlock: " });
         items.Add(new UIElementItem() { uiElement = e, Text = "This is an Ellipse: " });
         items.Add(new UIElementItem() { uiElement = r, Text = "This is a Rectangle: " });
         lbListBox.ItemsSource = items;
     }

 }

 public class UIElementItem
 {
     public UIElement uiElement { get; set; }
     public string Text { get; set; }
 }

这是XAML中的列表框:

<ListBox Name="lbListBox" HorizontalContentAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,2" Orientation="Horizontal">
                <TextBlock Text="{Binding Text}"/>
                <??? = "{Binding uiElement}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我想让ListBox显示文本和元素。

    • TextBlock Text ="{Binding Text}"**将显示文本,但如何显示元素?如何绑定?
qeeaahzv

qeeaahzv1#

您可以使用ContentPresenter

<ContentPresenter Content="{Binding uiElement}" />

这将显示UI元素。

<ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,2" Orientation="Horizontal">
                        <TextBlock Text="{Binding Text}"/>
                        <ContentPresenter Content="{Binding uiElement}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>

相关问题