如何在 Blend 中创建自定义列表

How to create a custom list in Blend

我是 Blend 和 WPF 的新手,我想要一个具有 ListBox 类属性但具有我自己的自定义项的控件。本质上,我希望每个项目都是带有标签的圆角矩形。我想到的第一种方法是使用 UserControl 和 StackPanel,尽管我想不出如何告诉程序哪些对象具有焦点。出于这个原因,我认为我可以使用一个 ListBox 并因此制作一个自定义 ListBoxItem,但显然只有矩形可以转换为控件,丢失标签。任何指针都会有很大的帮助。

您可以使用 ListBox,而不仅限于矩形而不是标签。

使用标准的列表框,ListBox.ItemTemplate 尽可能复杂。如果您需要将一堆控件层叠在一起,您可以从 Canvas 或 Grid 控件开始,然后从那里开始。

或者,您可以只将项目模板设为单个 Label 控件(如果项目在逻辑上表现为标签),并使用 ControlTemplate 完全重做为这些标签呈现的可视化树。

参考文献:

  1. ItemTemplate

  2. ControlTemplate

这是一个简单的例子。

XAML:

<Grid>
    <ListView ItemsSource="{Binding Path=Labels}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Rectangle Fill="CadetBlue" RadiusX="10" RadiusY="10" SnapsToDevicePixels="True">
                    </Rectangle>
                    <Label Content="{Binding}" Padding="10"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

"ViewModel":

    public IEnumerable<string> Labels
    {
        get { return new string[] { "Foo", "Bar", "Baz" }; }
    }

结果: