在 wpf 中应用样式时,用户控件内的组合框消失

sam*_*mar 3 wpf wpf-controls

我正在尝试将样式应用于组合框,但组合框本身并没有应用,而是消失了。请检查以下用于用户控制的 xaml 代码。

<用户控制
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Microsoft_Windows_Themes =“clr命名空间:Microsoft.Windows.Themes;程序集=PresentationFramework.Luna”
    x:Class="Guardian.PAS.PASFramework.UI.WPF.PASComboBox"
    xmlns:local="clr-命名空间:Guardian.PAS.PASFramework.UI.WPF"
    高度=26 宽度=100 垂直对齐=中心>
    <用户控件.资源>
        <Style x:Key="comboBoxStyle" TargetType="{x:Type local:PASCustomComboBox}">
            <设置属性=“模板”>
                <设置器.值>
                    <ControlTemplate TargetType="{x:Type local:PASCustomComboBox}">
                        <控制模板.触发器>
                            <触发器属性=“本地:PASCustomComboBox.IsEnabled”值=“假”>
                                <Setter属性=“背景”值=“红色”/>
                            </触发器>
                        </ControlTemplate.触发器>
                    </控制模板>
                </Setter.Value>
            </设置>
        </风格>
    </用户控件.资源>
    <画布名称=“画布”高度=“23”宽度=“自动”垂直对齐=“居中”>
        <标签高度=“23”名称=“lblCaption”宽度=“20”垂直对齐=“中心”>aaa</标签>
        <本地:PASCustomComboBox高度=“23”x:名称=“cmbComboBoxControl”VerticalAlignment=“中心”宽度=“50”
                  IsEditable="True" Style="{StaticResourcecomboBoxStyle}">
            </本地:PASCustomComboBox>
        <按钮高度=“23”名称=“btnSearch”宽度=“25”点击=“btnSearch_Click”可见性=“折叠”
                VerticalAlignment="中心">...</按钮>
        <标签高度=“23”名称=“lblDescription”垂直对齐=“中心”宽度=“20”前景=“蓝色”>

        </标签>

    </画布>
</用户控制>

这里 PASCustomComboBox 是一个继承自组合框的类。

public class PASCustomComboBox : ComboBox
{
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.Down || e.Key == Key.Up)
        {
            e.Handled = true;
            return;
        }

        base.OnPreviewKeyDown(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

Bub*_*rap 6

问题是您正在重新定义 ControlTemplate,其中没有任何可视化树:

<Style x:Key="comboBoxStyle" TargetType="{x:Type local:PASCustomComboBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:PASCustomComboBox}">
                <ControlTemplate.Triggers>
                    <Trigger Property="local:PASCustomComboBox.IsEnabled" Value="false">
                        <Setter Property="Background" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

您需要样式上的触发器而不是控件模板上的触发器:

<Style x:Key="comboBoxStyle" TargetType="{x:Type local:PASCustomComboBox}">
    <Style.Triggers>
        <Trigger Property="local:PASCustomComboBox.IsEnabled" Value="false">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)