如何在 Blend 中创建自定义列表
How to create a custom list in Blend
我是 Blend 和 WPF 的新手,我想要一个具有 ListBox 类属性但具有我自己的自定义项的控件。本质上,我希望每个项目都是带有标签的圆角矩形。我想到的第一种方法是使用 UserControl 和 StackPanel,尽管我想不出如何告诉程序哪些对象具有焦点。出于这个原因,我认为我可以使用一个 ListBox 并因此制作一个自定义 ListBoxItem,但显然只有矩形可以转换为控件,丢失标签。任何指针都会有很大的帮助。
您可以使用 ListBox,而不仅限于矩形而不是标签。
使用标准的列表框,ListBox.ItemTemplate 尽可能复杂。如果您需要将一堆控件层叠在一起,您可以从 Canvas 或 Grid 控件开始,然后从那里开始。
或者,您可以只将项目模板设为单个 Label 控件(如果项目在逻辑上表现为标签),并使用 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" }; }
}
结果:
我是 Blend 和 WPF 的新手,我想要一个具有 ListBox 类属性但具有我自己的自定义项的控件。本质上,我希望每个项目都是带有标签的圆角矩形。我想到的第一种方法是使用 UserControl 和 StackPanel,尽管我想不出如何告诉程序哪些对象具有焦点。出于这个原因,我认为我可以使用一个 ListBox 并因此制作一个自定义 ListBoxItem,但显然只有矩形可以转换为控件,丢失标签。任何指针都会有很大的帮助。
您可以使用 ListBox,而不仅限于矩形而不是标签。
使用标准的列表框,ListBox.ItemTemplate 尽可能复杂。如果您需要将一堆控件层叠在一起,您可以从 Canvas 或 Grid 控件开始,然后从那里开始。
或者,您可以只将项目模板设为单个 Label 控件(如果项目在逻辑上表现为标签),并使用 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" }; }
}
结果: