C#WPF-禁用的组合框应该看起来像标签

本文关键字:看起来 标签 组合 C#WPF- | 更新日期: 2023-09-27 18:27:25

当wpf中的组合框被禁用时,我正试图更改它的样式。它应该看起来像一个纯文本(标签)。

这是我的代码:

<Style TargetType="{x:Type ComboBox}">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="BorderBrush" Value="Black" />
            <Setter Property="BorderThickness" Value="0"></Setter>
            <Setter Property="Background" Value="{x:Null}" />
        </Trigger>
    </Style.Triggers>
</Style>

但它似乎不起作用。有什么提示吗?

C#WPF-禁用的组合框应该看起来像标签

您可以添加ControlTemplate,因此组合框将显示为TextBox(没有边框、背景、切换按钮等)。但它起作用作为组合框(具有下拉列表)。如果控制被取消(因此它将像标签一样显示)

<ComboBox.Template>
<ControlTemplate>
    <TextBlock Text="{Binding SelectedItem.MyText,RelativeSource={RelativeSource Mode=TemplatedParent}}"></TextBlock>
</ControlTemplate>
</ComboBox.Template>

如果控件在某些条件下看起来像另一个控件,则ContentControl可以满足这种要求。您可以根据给定的条件切换到适当的内容。

<ContentControl IsEnabled="True" /> // or IsEnabled="False"

然后通过样式切换。。

<Style TargetType="{x:Type ContentControl}">
    <Style.Triggers>
            <Trigger Property="IsEnabled" Value="true">
                // combobox
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
                 // Label
            </Trigger>
    </Style.Triggers>
</Style>

只需放置两个控件,即ComboBox和Label。将每个的Visibility属性绑定到布尔值,指示是否应启用ComboBox,以便一个在启用时可见,另一个在禁用时可见。