2014-01-08 147 views
0

我試圖讓某些邊界元素具有提高的邊框尺寸和顏色如下應用樣式:WPF樣式不應用於Border元素

<Border Name="AlarmBorder"> 
          <Border.Style> 
           <Style TargetType="{x:Type Border}"> 
            <Setter Property="Background"> 
             <Setter.Value> 
              <SolidColorBrush Color="{Binding AlarmPriority.BackColour, Converter={StaticResource PriorityBrush}}" /> 
             </Setter.Value> 
            </Setter> 
            <Setter Property="BorderBrush"> 
             <Setter.Value> 
              <SolidColorBrush Color="{Binding AlarmPriority.BackColour, Converter={StaticResource PriorityBrush}}" /> 
             </Setter.Value> 
            </Setter> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding Path=OPCAlarm.OPCAlarmTriggered}" Value="True"> 

              <Setter Property="BorderThickness" Value="10"/> 
             </DataTrigger> 
             <DataTrigger Binding="{Binding Path=OPCAlarm.OPCAlarmTriggered}" Value="False"> 

              <Setter Property="BorderThickness" Value="1"/> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </Border.Style> 

這增加了邊框的厚度,但顏色不應用。如果我將顏色移動到邊框標記中,如下所示:

<Border Name="AlarmBorder" BorderBrush="{Binding AlarmPriority.BackColour, Converter={StaticResource PriorityBrush}}"> 

我得到正確顏色的邊框。

因此,風格級別應用的顏色不會被應用(但BorderThickness屬性會),但在元素級別顏色會通過。

有人能告訴我我做錯了什麼嗎?

感謝

回答

0

行爲是由於Dependency property value precedence

本地一套物業擁有風格制定者更高的優先級因此,如果您設置本地值,不管你是什麼風格DataTriggers設置,也不會得到應用。

你需要將其移動到樣式設置器,以便它可以使用樣式DataTriggers切換。

<Border Background="Red"> 
     <Border.Style> 
      <Style TargetType="Border"> 
       <Setter Property="Background" Value="Green"/> 
      </Style> 
     </Border.Style> 
    </Border> 

就像上面的例子中,邊界將永遠是Red因爲它擁有風格制定者更高的優先級順序。

優先順序

  1. 房產系統強制。
  2. 活動動畫或具有保持行爲的動畫。
  3. 當地價值。
  4. 模板父項模板屬性
  5. 隱式樣式。
  6. 樣式觸發器。
  7. 模板觸發器。
  8. 風格二傳手。
  9. 默認(主題)風格。
  10. 繼承。
  11. 來自依賴項屬性元數據的默認值。

UPDATE

您使用PriorityBrush轉換器,我想它已經轉換到ColorBrush,所以直接綁定到後臺(無需創建另一個刷)。這將工作:

<Setter Property="BorderBrush" 
     Value="{Binding AlarmPriority.BackColour, 
        Converter={StaticResource PriorityBrush}}"/> 

如果轉換器是從顏色做轉換隻能刷機,可以完全忽略這一點,這樣做:

<Setter.Value> 
    <SolidColorBrush Color="{Binding AlarmPriority.BackColour}"/> 
</Setter.Value> 
+0

感謝這個,但如果你再看看我的例如,我只在STYLE Setter級別設置背景顏色 - 不是在本地級別。只有當我將這個屬性移動到本地時,它才起作用,但我不想要這個 - 我希望它處於Style中,這是不起作用的。 –

+0

哦,現在我找到了你。請參閱答案中的更新。 –

相關問題