通过我的初始程序代码,我已经能够生成dictionary
{string, int}
一些长度(大多数为3)。
在我的应用程序中,我必须显示由semi-colon
分隔的字符串,并且在将鼠标悬停在某个字符串上时,它应该将字符串的相应int显示为某种tooltip
< / p>
我这样做的想法是显示标签(等于字典中的字符串数量),从字典的键中拾取每个标签的内容,并显示相应值对的工具提示。
虽然,我能够如上所述生成这些标签,但我不确定,我应该如何以Label1 Content ; Label2 Content ; Label3 Content
这是做这件事的正确方法吗?如何根据上面的布局显示标签(在堆栈面板或其他什么?如果我将标签设置为堆栈面板的子项,它们将如何由;
分隔)。我不太确定。
答案 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);
其中Items
为ObservableCollection<Item>
类型,Item
定义为:
public class Item
{
public string Name { get; set; }
public int Value { get; set; }
}
请注意,如果您在构造函数之外的任何内容中实例化ObservableCollection
,那么您的Items
属性设置器应调用PropertyChanged
事件,以便向UI通知更改。
我不知道您渲染了多少项,但您也可以使用WrapPanel
,这样Label
可以在达到一定宽度后进行换行。请注意,WPF中实现的WrapPanel
不会虚拟化,因此对于大量项目执行效果不佳。