从字典中分割和显示内容

本文关键字:显示 分割 字典 | 更新日期: 2023-09-27 18:24:58

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

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

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

虽然,我能够如上所述生成这些标签,但我不确定,我应该如何以Label1 Content ; Label2 Content ; Label3 Content 这样的方式显示它们

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

从字典中分割和显示内容

您将希望使用ItemsControl,其ItemsPanel设置为StackPanelOrientationHorizontal

看看这里-使用不同的模板为WPF项目控制中的最后一个项目。

这显示了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并没有虚拟化,因此它对大量项目的性能不会很好。