我想使用使用不同内容的ListBoxItems。对于XAML中的定义,我使用以下方法。
<Style TargetType="{x:Type ListBoxItem}" x:Key="ExampleBaseListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border>
<ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ExampleListBoxItem" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ListBoxItem Style="{DynamicResource ExampleBaseListBoxItem}">
<TextBox />
</ListBoxItem>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这很好,但是我有两个问题。
这是在XAML中定义的好习惯,还是我应该使用STH其他?
当样式时,我该如何达到相同的结果
exampleBaselistBoxItem已经存在
请不要担心文本框。我正在寻找一种方法,示例本身仅用于演示目的。
这不是接近此类事情的通常方法。
您应该在XAML而不是代码中定义样式和模板。
但是。
使用datatype =使用datatype =而不是重新启动ListBoxItem的DataTemplates更常见
类型是行ViewModel的类型。
因此,您将(说(TextBoxVM类,DividerVM类等。
您将对象的观测值绑定到您的物品。
模板将textboxvm输出到文本框中
我碰巧有:
<DataTemplate DataType="{x:Type local:DividerVM}">
<local:Divider />
</DataTemplate>
<DataTemplate DataType="{x:Type local:DrawCategoryVM}">
<Grid>
<TextBlock FontSize="{DynamicResource BigFont}" Text="{Binding Heading}" />
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type local:DrawOptionVM}">
<Grid Height="38"
Background="Transparent"
>
您可以将基于基于一种样式的"继承"属性用于另一种样式。