2010-04-19 85 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>