2011-08-05 126 views
0

我尝试自定义组合框时出现问题。它在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堆叠图像,并允许用户从列表中选择一个,除了显示的图像外没有别的。

谢谢。

编辑: 马里奥的解决方案把它放在一个风格的作品,但它是唯一的方法来做到这一点?

回答

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 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> 

也把风格declatarion在你的用户控件。

+0

我尝试过之前的样式,但它试过你的。我把它放在我的App.xaml中,ComboBox抛出一个错误:无法找到资源“cbStyle”,所以我试图把样式放在UserControl中,甚至在持有ComboBox的Grid中也是如此。 看来我错过了关于UserControls的一个关键信息... –

+0

好吧,现在我删除了Style =“{StaticResource cbStyle}”,它使用了样式...即使我没有指定使用它,它是一个有名的资源。我认为隐式样式需要是无名的oO –

+0

它不是x:Name,它是x:Key ... lol –

相关问题