WPF C#如何通过代码创建派生样式



我想使用使用不同内容的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>

这很好,但是我有两个问题。

  1. 这是在XAML中定义的好习惯,还是我应该使用STH其他?

  2. 当样式时,我该如何达到相同的结果
    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"
          >

您可以将基于基于一种样式的"继承"属性用于另一种样式。

相关内容

  • 没有找到相关文章

最新更新