2010-03-30 97 views
8

我正試圖在Background中設置一個簡單的TextBox以及一些水印文本。我的代碼基於Philip Patrick's blog的示例。WPF綁定風格

我試圖調整它,以便在TextBox上的ToolTip屬性中檢索顯示在背景中的文本。

目前這個工程:

<TextBox ToolTip="Type a name here..."> 
      <TextBox.Background> 
       <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"> 
        <VisualBrush.Visual> 
         <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/> 
        </VisualBrush.Visual> 
       </VisualBrush> 
      </TextBox.Background> 
     </TextBox> 

,顯示在TextBoxBackgroundToolTip文本。

但是,如果我移動代碼的一部分出來的資源風格的結合不再獲得來自TextBoxToolTip信息:

<Grid> 
    <Grid.Resources> 
     <Style x:Key="WatermarkBackground" TargetType="{x:Type TextBox}"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"> 
         <VisualBrush.Visual> 
          <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/> 
         </VisualBrush.Visual> 
        </VisualBrush> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Grid.Resources> 

    <TextBox ToolTip="Type your name here..." Style="{StaticResource WatermarkBackground}"/> 

這裏

任何提示嗎?

+1

你能使用模板,而不是一個風格的,所以你可以使用{綁定的RelativeSource = {的RelativeSource TemplatedParent},路徑=工具提示}? – 2010-03-30 16:57:24

回答

1

您不能以您嘗試的方式訪問TextBox,您的TextBlock不在TextBox的可視層次結構中。所以它無法找到文本框。您可以嘗試使用水印文本框。 Check this水印文本框樣本。

1

我剛剛有一個相同的問題,最終通過綁定到工具提示的PlacementTarget來解決它。答案就在這裏詳細link text

傑里米