2014-02-05 11 views
0

몇 개의 텍스트 상자가 있고 워터 마크가있는 스타일을 사용하고 싶습니다 (예 : 입력란에 'First Name Here Here'라는 텍스트가 포함될 것입니다.)스타일 속성을 바인딩하는 방법은 무엇입니까?

일반적으로 RelativeSource 바인딩을 사용했지만 스타일에 포함 된 Label이 어떤 바인딩도 허용하지 않는 이상한 버그가 발생했습니다. 예를 들어, 다음과 같은 바인딩 모든 곳에서 작동하지만 라벨의 내용 : 여기에 참고로

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



내가 작업하고있는 코드입니다.

텍스트 상자의 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 스타일에서 작동하지 않습니다으로 처리되지 않는 것을 명심있다.

해결 방법 : 액세스 부모 타입 FrameworkElement (또는 TextBox)의 제어와 ToolTip 속성을 수 있도록 적절한 브러시 대신사용 ControlTemplate.

+0

ControlTemplate에 대해 알려 주셔서 감사합니다. 워터 마크 문제가 해결되었지만 탭 컨트롤에 문제가 발생했습니다. 나는 그것을 다른 질문으로 제출할 것이다. – user3275129

관련 문제