2016-01-30 134 views
0

在我開始之前,我的最終目標是爲所有控件提供默認的工具提示樣式,當工具提示所在的控件存在驗證錯誤時,其正常邊框會變爲紅色正在顯示。在樣式中綁定屬性附加屬性

所以ToolTip有一個PlacementTarget屬性,它是顯示工具提示的控件。有一個Validation.HasError附加屬性,它在PlacementTarget控件發生數據綁定錯誤時被設置。比如我有一個文本框,並在文本框的風格,我可以做到這一點:

<Style TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="ToolTip"> 
       <Setter.Value> 
        <ToolTip Content="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.(Validation.Errors)[0].ErrorContent}"/> 

現在,我可以做的工具提示風格的紅色邊框及以上設置在扳機,但我寧願不必在每個控件的樣式觸發器中都這樣做,所以我希望我的ToolTip樣式可以自己處理這個功能。

我已經試過各種事情,最近這(如果有一個錯誤的轉換器基本上返回紅,黑如果不):

<Style TargetType="{x:Type ToolTip}"> 
    <Setter Property="BorderBrush" Value="{Binding Path=PlacementTarget.Validation.HasError, RelativeSource={RelativeSource Self}, Converter={StaticResource ToolTipBorderConverter}}"/> 
</Style> 

但是,從給出的錯誤,它看起來像是一個試圖讓

System.Windows.Data Error: 40 : BindingExpression path error: 'Validation' property not found on 'object' ''TextBox' (Name='')'. BindingExpression:Path=PlacementTarget.Validation.HasError; DataItem='ToolTip' (Name=''); target element is 'ToolTip' (Name=''); target property is 'BorderBrush' (type 'Brush') 

我也試過類似:

<Style TargetType="{x:Type ToolTip}"> 
    <Style.Triggers> 
     <Trigger Property="PlacementTarget.Validation.HasError" Value="True"> 
      <Setter Property="BorderBrush" Value="Red"/> 
上文本框稱爲驗證,而不是附加屬性的實際屬性

但是我得到一個錯誤,說我不能像這樣嵌套觸發器的屬性。

有沒有辦法完成我在這裏要做的事情?

+0

謝謝,同時發現這個權利! – StuartMorgan

回答

0

搜索了幾個小時的答案,並在發佈後立即看到一篇相關文章,讓我得到了答案:您必須將Validation.HasError包裝在括號內以便將其識別爲附加屬性。

<Style TargetType="{x:Type ToolTip}"> 
    <Setter Property="BorderBrush" Value="{Binding Path=PlacementTarget.(Validation.HasError), RelativeSource={RelativeSource Self}, Converter={StaticResource ToolTipBorderConverter}}"/>