2010-04-19 56 views
3

我在资源字典中定义了一个Style,该资源字典适用于 所有ComboBox控件。内ComboBox控制中,我引用的样式像这样:资源字典中的WPF参考样式和使用触发器

Style="{DynamicResource MyComboBoxStyle}"

该工程确定。

我希望能够为某些ComboBox控件添加一些触发器。

什么是使用Style作为动态资源的好方法,但仍然可以将Trigger s添加到某些ComboBox控件中?

回答

0

为要应用触发器的ComboBox控件创建新样式,并使用新样式的BasedOn属性设置其基础样式。

+0

当我尝试这样做时,出现以下错误: 无法在'Style'类型的'BasedOn'属性上设置'DynamicResourceExtension'。 – 2010-04-19 16:08:30

+0

为什么你使用DynamicResource呢? StaticResource应该用于设置样式。 – Charlie 2010-04-19 16:52:49

+0

样式位于单独的模块中(使用CAL),所以我必须指定DynamicResource才能使用它。 – 2010-04-21 12:22:00

1

更新: 后重新阅读的问题,我知道这不是正是OP是问。我可以删除这个,但也许对于这个问题磕磕绊绊的人会有帮助。


下面是一个例子,用XAML资源字典定义模板和触发器,与引用的资源和应用样式的窗口一起。

它可以帮助别人寻找到使用模板和触发:

我的资源名为 “Style1.xaml”

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<ControlTemplate x:Key="TonyTemplate" TargetType="Button"> 
    <Border Name="Border" 
      BorderBrush="Orange" 
      BorderThickness="3" 
      CornerRadius="2" 
      Background="Ivory" 
      TextBlock.Foreground="Black"> 
     <Grid> 
      <ContentPresenter RecognizesAccessKey="True" 
           Margin="{TemplateBinding Padding}"/> 
     </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter TargetName="Border" Property="Background" Value="Yellow" /> 
     </Trigger> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter TargetName="Border" Property="Background" Value="Chartreuse" /> 
      <Setter TargetName="Border" Property="BorderBrush" Value="DarkKhaki" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

我主窗口XAML代码:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Style1.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Grid> 
     <Button Width="100" Height="50" 
       Template="{StaticResource TonyTemplate}" 
       Content="Click me"/> 
    </Grid> 
</Window>