2014-02-05 54 views
0

我有幾個文本框,並希望爲每個樣式設置一個水印(例如:一個文本框將包含文本'在此輸入名字',直到您開始輸入文字爲止。)如何綁定樣式的屬性?

通常我只是使用RelativeSource綁定,但我遇到了一個奇怪的錯誤,其中樣式內的標籤不會接受任何綁定,我扔在它。例如,下面的綁定工作,到處但標籤的內容:

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=Title} 



僅供參考這裏是我一起工作的代碼。

的TextBox的XAML:

<TextBox x:Name="textBox_test" Style="{StaticResource textBoxStyle_watermark}" ToolTip="Hello" 


風格的XAML:

<Style x:Key="textBoxStyle_watermark" TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
     <Style.Resources> 
      <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None"> 
       <VisualBrush.Visual> 
        <Label Padding="10,0,0,0" Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ToolTip}" Foreground="Gray" /> 
       </VisualBrush.Visual> 
      </VisualBrush> 
     </Style.Resources> 
     <Style.Triggers> 
      <Trigger Property="Text" Value="{x:Static sys:String.Empty}"> 
       <Setter Property="Background" Value="{StaticResource CueBannerBrush}" /> 
      </Trigger> 
      <Trigger Property="Text" Value="{x:Null}"> 
       <Setter Property="Background" Value="{StaticResource CueBannerBrush}" /> 
      </Trigger> 
      <Trigger Property="IsKeyboardFocused" Value="True"> 
       <Setter Property="Background" Value="White" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 


任何幫助,將不勝感激,謝謝。

回答

0

您遇到的問題是與樣式設置值綁定無關,它工作正常。問題在Content屬性和你綁定到父元素的方式。

問題:你始終牢記,在WPF資源款式不爲模板的一部分,因此TemplatedParent以及AncestorType不會在風格工作處理。

解決方案:ControlTemplate使用具有適當刷代替這將允許FrameworkElement型(或TextBox)的訪問父控制及其ToolTip屬性。

+0

感謝您告訴我有關ControlTemplate的信息!水印問題現在已解決,但我遇到了與選項卡控件有關的問題。儘管如此,我仍將其作爲一個不同的問題提交 – user3275129