从字典中分割和显示内容

时间:2012-02-18 10:48:15

标签: c# wpf

通过我的初始程序代码,我已经能够生成dictionary {string, int}一些长度(大多数为3)。

在我的应用程序中,我必须显示由semi-colon分隔的字符串,并且在将鼠标悬停在某个字符串上时,它应该将字符串的相应int显示为某种tooltip < / p>

我这样做的想法是显示标签(等于字典中的字符串数量),从字典的键中拾取每个标签的内容,并显示相应值对的工具提示。

虽然,我能够如上所述生成这些标签,但我不确定,我应该如何以Label1 Content ; Label2 Content ; Label3 Content

的方式显示它们

这是做这件事的正确方法吗?如何根据上面的布局显示标签(在堆栈面板或其他什么?如果我将标签设置为堆栈面板的子项,它们将如何由;分隔)。我不太确定。

1 个答案:

答案 0 :(得分:1)

您需要使用ItemsControl,其ItemsPanel设置为StackPanel Orientation Horizontal

看看这里 - Use different template for last item in a WPF itemscontrol

这显示了XAML中的一个解决方案,它允许您在ItemsControl中的最后一项之后省略分号。

您可能希望做的另一件事是将字典转换为{Item'类型的ObservableCollection或类似的东西,这意味着您可以在ItemControl模板绑定中使用属性名称,整洁。类似的东西:

var items = dictionary.Select(kv => new Item { Name = kv.Key, Value = kv.Value });
this.Items = new ObservableCollection<Item>(items);

其中ItemsObservableCollection<Item>类型,Item定义为:

public class Item
{
    public string Name { get; set; }
    public int Value { get; set; }
}

请注意,如果您在构造函数之外的任何内容中实例化ObservableCollection,那么您的Items属性设置器应调用PropertyChanged事件,以便向UI通知更改。

我不知道您渲染了多少项,但您也可以使用WrapPanel,这样Label可以在达到一定宽度后进行换行。请注意,WPF中实现的WrapPanel不会虚拟化,因此对于大量项目执行效果不佳。