我尝试使用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很难对其进行操作。我似乎无法找到使每一行按风格个性化的命令。
答案 0 :(得分:2)
首先,我们需要设置ItemTemplate
以容纳我们的样式控件
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock>
<DataTemplate>
</ListView.ItemTemplate>
第二,FontSize
依赖什么?字符串本身。这意味着我们需要在项目模板中绑定它:
<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
。实施真的取决于你。
你也可以在行&#34;容器&#34;上设置它。控制,因为它也应该适用于嵌套控件。请参阅MSDN。
试图澄清评论中的混淆:
&#34;路径=&#34。意味着&#34;绑定到对象本身&#34;。由于您已经将相关字符串作为数据上下文,因此您不希望绑定到它的属性,而是要绑定到字符串。
必须在容器的Resources
集合中定义静态资源;例如:
<UserControl.Resources>
<local:TabCountStringConverter x:Key="TabCountStringConverter"/>
</UserControl.Resources>
在哪里&#34;本地&#34;以前被定义为xmlns
。在评估绑定时使用转换器的返回值,我们在这里做的是告诉框架使用哪个转换器。如果我们不做一个(如上所示),您将获得未找到资源的例外。