C# WPF ListView动态个性化每一行的字体大小

标签 c# wpf xaml listview

我正在尝试使用 ListView 在 WPF 中创建一个动态列表。我的代码读入一个文件并将其导入到要显示的列表中。我的意图是每次在字符串中看到制表符时,该行的字体大小将减小 4(从 24 的字体大小开始)。所以所有没有制表符的字符串都是 24,所有有 1 个制表符的字符串都是 20,所有有 2 个制表符的字符串都是 16,等等)。理想情况下,我希望每次向列表中添加行时都设置行样式(至少,我认为这是最简单的)。

所以,理想情况下我会看到这样的东西:

String(Font Size 24)

    String(Font Size 20)

      String(Font Size 16)

    String(Font Size 20)

      String(Font Size 16)

         And so on.....

我是 WPF 的新手,发现目前很难使用 XAML 对其进行操作。我似乎找不到使每一行都针对样式进行个性化设置的命令。

最佳答案

首先,我们需要设置一个 ItemTemplate 来放置我们的样式控件

<ListView.ItemTemplate>
   <DataTemplate>
      <TextBlock>
   <DataTemplate>
</ListView.ItemTemplate>

其次,FontSize依赖什么?字符串本身。这意味着我们需要在项目模板中绑定(bind)它:

<TextBlock FontSize="{Binding Text}"/> //Could be "." if binding to List<String>

请注意,我们可以这样做,因为 FontSize 是一个依赖属性。最后,文本显然不是一个数字,所以我们需要一个转换器将其转换为一个:

<TextBlock FontSize="{Binding Path=Text,
                              Converter={StaticResource TabCountStringConverter}}"/> 

public class TabCountStringConverter : IValueConverter
{
    public object Convert(...)
    {
         return (value as String).Count(c => c == '\t'); //Count tabs
    }

    public object ConvertBack(...)
    {
         return Binding.DoNothing;
    }
}

我没有对我的标签计数功能提出任何要求,但它是一个好的开始:) 它需要一个元素来将标签计数更改为正确的字体大小,也许是一个 Dictionary。实现完全取决于您。

您也可以在行“容器”控件上设置它,因为它也应该适用于嵌套控件。参见 MSDN .

尝试消除评论中的困惑:

  1. “路径=。”意思是“绑定(bind)到对象本身”。由于您已经有问题的字符串作为数据上下文,因此您不想绑定(bind)到它的属性,而是想绑定(bind)到字符串。

  2. 静态资源必须在容器的Resources 集合中定义;例如:

    <UserControl.Resources>
       <local:TabCountStringConverter x:Key="TabCountStringConverter"/>
    </UserControl.Resources>
    

    “本地”之前被定义为 xmlns。在评估绑定(bind)时使用转换器的返回值,我们在这里所做的是告诉框架要使用哪个转换器。如果我们不创建一个(如上所示),您将得到一个资源未找到异常。

关于C# WPF ListView动态个性化每一行的字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221258/

相关文章:

c# - 检查 WPF 应用程序的其他实例是否正在运行

c# - XAML 中图标格式的最佳实践(SVG、路径数据点、几何/XAML 或字体)

c# - 在 C# 中使用 DI 登录到控制台

c# - 在viewmodel的构造函数中调用async方法加载数据有警告

c# - DirectX 或 OpenGL

c# - Chrome 浏览器 61v。单击可见区域外的元素时出现问题

wpf - 如何在Wpf中设置图像的来源?

wpf - 复选框值更改时更改 WPF ComboBox 中的数据绑定(bind)

c# - WPF XAML 使用数据绑定(bind)更改多个椭圆颜色

windows-phone-7 - 当内容高度 > 2000px 时 WP7 ScrollViewer Bug