Silverlight:列表框中的分隔符?

时间:2010-10-10 19:34:28

标签: c# silverlight

我有一个包含多个项目的列表框。我想以编程方式在列表框中插入一个分隔栏。这可能吗?

MSDN谈到Separator控件,但当我尝试实例化时,Visual Studio无法识别它。

我正在使用Silverlight 4。

3 个答案:

答案 0 :(得分:2)

您引用的Separator控件是在WPF中,在Silverlight中不支持我在文档中看到的内容。

我会通过模板处理这个问题。使用项目的表示和分隔符的第二个表示来设置模板,然后将每个模板的可见性绑定到数据对象上的IsSeparator标志。

然后,您需要做的就是设置创建一个虚拟对象,并将IsSeparator标志设置为true以获取列表中的新项目。

答案 1 :(得分:1)

见: http://manfredlange.blogspot.com/2009/04/separator-for-menu-item-in-xaml-wpf.html

我在silverlight 4中使用它,我只是拖动&从工具箱中删除,它为我添加了对工具包的引用:

xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"

我用这种方式:

<toolkit:Separator Margin="15"/>

答案 2 :(得分:0)

我做了类似詹姆斯的修复。将一个布尔字段添加到列表框绑定的TableModel上。

我对按类别分组的数据有额外要求,我在下面的LINQ查询中留下了这些要求。如果您不需要,可以使用allData.Count代替numDataTypes。我的布尔值名为IsLastItem,填充为:

int numDataTypes = allData.Select(o => o.Type).Distinct().Count();
IEnumerable<TableModel> ByTypes = allData
              .GroupBy(o => o.Type)
              .Select((g, index) => new TableModel()
              {
                ...
                IsLastItem = index == (numDataTypes - 1),
              });

然后在ListBox(或ItemsControl)中我使用了布尔到可见性转换器(类似于此处发布的Silverlight 4: how to switch control visibility):

<ItemsControl ItemsSource="{Binding ByTypes}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                ...

                <!-- Seperator between list items -->
                <Rectangle Grid.Row="3" Height="20" Visibility="{Binding IsLastItem, Converter={StaticResource VisibileWhenFalseConverter}}" />
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
相关问题