WPF Select 基于变量的 ComboBox 文本样式

WPF Select ComboBox text style based on variable

我有一个 ComboBox,我希望能够根据 ComboBoxItem.[=18 的属性更改 ComboBoxItem 中的文本样式=]

<ComboBox ItemsSource="{Binding Countries}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <ContentControl Content="{Binding}" Focusable="False">
                <ContentControl.Style>
                    <Style TargetType="{x:Type ContentControl}">
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Name}" Style="{StaticResource MyStyle}" />
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
        </DataTemplate>
    </ComboBox.ItemTemplate>

如果国家/地区的属性 IsWestern 为真,我一直在尝试将 MyStyle 的 TextBlock 样式设置为其他样式,但我无法管理。我想我需要一个 Trigger 某处,但我无法弄清楚并添加了一个品种,但 none 到目前为止工作。

使用 DataTrigger 更改 ContentTemplate:

<Style TargetType="{x:Type ContentControl}">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" Style="{StaticResource MyStyle}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsWestern}" Value="True">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" Style="{StaticResource WesternStyle}" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

或者在 TextBlock 样式 (MyStyle) 中包含 <DataTrigger Binding="{Binding Path=IsWestern}" Value="True"> 并在那里更改所需的 TextBlock 属性:

<Style x:Key="MyStyle" TargetType="TextBlock">
    <Setter Property="LineStackingStrategy" Value="BlockLineHeight"></Setter>

    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsWestern}" Value="True">
            <Setter Property="Padding" Value="20,0,0,0"></Setter>
        </DataTrigger>
    </Style.Triggers>

</Style>