ComboBox突出显示

时间:2011-08-05 11:49:59

标签: wpf templates combobox

我的组合框有问题我正在尝试自定义。它位于UserControl中,我希望它的BorderBrush属性在鼠标悬停时从透明变为白色(淡入/淡出将是奖励)。

但我似乎无法获得正确的触发器语法...现在我感到困惑,我可能会遗漏一些明显的东西。

以下是有问题的组合框:

<ComboBox x:Name="comboEmiCategories" ItemsSource="{Binding}" Background="Transparent" Height="15px" Width="30px" BorderBrush="Transparent" Padding="-2">
                    <ComboBox.Resources>
                        <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">0</sys:Double>
                    </ComboBox.Resources>
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <Image Source="{Binding}" Stretch="UniformToFill" Height="15px" Width="30px" Margin="0" />
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                    <ComboBox.Template>
                        <ControlTemplate>
                            <ControlTemplate.Triggers>
                                <Trigger Property="ComboBox.IsMouseOver" Value="True">
                                    <Setter Property="ComboBox.BorderBrush" Value="White" />
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </ComboBox.Template>
                </ComboBox>

触发器不起作用,实际上更糟糕的是,如果我没有注释掉整个ComboBox.Template部分,控件就会消失。

主要目标是拥有一个堆叠图像的ComboBox,并允许用户从列表中选择一个,只显示那些图像。

感谢。

编辑: 马里奥把它放在一个风格中的解决方案是有效的,但它是唯一的方法吗?

1 个答案:

答案 0 :(得分:0)

尝试将下面的xaml放在window / usercontrol的Resources部分中。

<Style x:Name="cbStyle" TargetType="ComboBox">
   <Setter Property="BorderBrush" Value="Transparent" />
   <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
         <Setter Property="BorderBrush" Value="White" />
      </Trigger>
   </Style.Triggers>
</Style>

当然,您必须在ComboBox元素中引用此样式。还可以在ControlTemplate中剪切任何内容,这是无用的。

编辑:您的ComboBox部分应如下所示:

<ComboBox x:Name="comboEmiCategories" ItemsSource="{Binding}" Height="15px" Width="30px" Style="{StaticResource cbStyle}" Padding="-2">
                    <ComboBox.Resources>
                        <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">0</sys:Double>
                    </ComboBox.Resources>
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <Image Source="{Binding}" Stretch="UniformToFill" Height="15px" Width="30px" Margin="0" />
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>

还将Style declatarion放入UserControl。