我正在尝试将样式应用于组合框但是不是应用组合框本身就会消失。请检查以下xaml代码以获取用户控制权。
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna" x:Class="Guardian.PAS.PASFramework.UI.WPF.PASComboBox" xmlns:local="clr-namespace:Guardian.PAS.PASFramework.UI.WPF" Height="26" Width="100" VerticalAlignment="Center" > <UserControl.Resources> <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> </UserControl.Resources> <Canvas Name="canvas" Height="23" Width="Auto" VerticalAlignment="Center"> <Label Height="23" Name="lblCaption" Width="20" VerticalAlignment="Center">aaa</Label> <local:PASCustomComboBox Height="23" x:Name="cmbComboBoxControl" VerticalAlignment="Center" Width="50" IsEditable="True" Style="{StaticResource comboBoxStyle}"> </local:PASCustomComboBox> <Button Height="23" Name="btnSearch" Width="25" Click="btnSearch_Click" Visibility="Collapsed" VerticalAlignment="Center">...</Button> <Label Height="23" Name="lblDescription" VerticalAlignment="Center" Width="20" Foreground="Blue"> </Label> </Canvas> </UserControl>
这里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);
}
}
答案 0 :(得分:2)
问题是你正在重新定义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>
你需要风格上的触发器而不是controltemplate:
<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>
答案 1 :(得分:0)
你没有在你的风格的控制模板中指定任何视觉元素,只是一个触发器。 它将呈现空模板iirc。
更好地编辑样式中ComboBox的Trigger集合以添加该触发器,并保留默认的ControlTemplate。