2012-08-01 121 views
9

我在這裏找到了許多類似的線程,但似乎沒有解決我的特定問題。將WPF樣式觸發器綁定到自定義依賴屬性

我需要在某些條件下突出顯示文本框的背景。我已經創建了一個Highlight屬性,並嘗試在樣式中使用觸發器來設置它,但實際上並沒有突出顯示文本。

這是我的風格,簡化:

<Style x:Key="TextBoxStyle" BasedOn="{StaticResource CommonStyles}"> 
    <Style.Triggers> 
     <Trigger Property="Elements:DataElement.Highlight" Value="True"> 
      <Setter Property="Control.Background" 
        Value="{DynamicResource EntryBoxHighlightBackground}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

元素被定義爲:

xmlns:Elements="clr-namespace:MDTCommon.Controls.Forms.Elements"> 

然後,我有其中應用該樣式的部分:

<!-- Applies above style to all TextBoxes --> 
<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxContentHolder}" > 
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" /> 
    <!-- Overrides the default Error Style --> 
</Style> 

在DataElement類的後面的代碼如下:

public static readonly DependencyProperty HighlightProperty = 
    DependencyProperty.Register("Highlight", typeof(bool), typeof(DataElement)); 

public bool Highlight 
{ 
    get { return (bool)base.GetValue(HighlightProperty); } 
    set { base.SetValue(HighlightProperty, value); } 
} 

最終從UserControl派生的DataElement,它包含對TextBox對象以及其他對象的引用。

在容納所有DataElement對象的CustomForm類中,我有以下設置顏色。

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow; 

所以,第一個問題是設置DataElement的Highlight屬性不會導致文本框背景以黃色繪製。

另一個問題是,我意識到我正在將此樣式應用於所有文本框,並且我可能在其他區域中沒有實際包含在DataElement中的文本框,這可能會導致綁定問題。

+0

嘗試二傳手「背景」添加到您的風格 – 2012-08-01 16:08:24

+0

我有一個二傳手。 – WPFNewbie 2012-08-01 20:41:56

+0

我忽略了很多風格來保持簡單,並專注於我認爲問題可能出現的地方。 – WPFNewbie 2012-08-01 20:43:16

回答

5

試試你的觸發轉換爲DataTrigger,並添加綁定,這將直接看DataElement控制,就像這樣:

<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True"> 
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/> 
</DataTrigger> 
+3

爲什麼?簡單的'''Trigger'''應該支持依賴屬性,不是嗎? – boli 2015-06-16 13:13:11