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

时间:2016-10-21 20:46:35

标签: c# wpf listbox blend

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

1 个答案:

答案 0 :(得分:0)

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

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

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

参考文献:

  1. ItemTemplate

  2. ControlTemplate

  3. 这是一个简单的例子。

    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" }; }
        }
    

    结果:

    Output