2011-05-10 3 views
0

,내가이 같은 템플릿을

<Style x:Key="WaterMarkTextBoxStyle" BasedOn="{StaticResource {x:Type TextBox}}" TargetType="{x:Type TextBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBox}"> 
       <Grid> 
        <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
        <TextBlock x:Name="textBlock" Opacity="0.345" Text="Enter Text Here" TextWrapping="Wrap" Visibility="Hidden" /> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsFocused" Value="False" /> 
          <Condition Property="Text" Value="" /> 
         </MultiTrigger.Conditions> 
         <Setter Property="Visibility" TargetName="textBlock" Value="Visible" /> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

이 WPF에서 워터 마크 텍스트 상자로 아주 잘 작동하는 것 같다,하지만 어떻게 내가 무엇을 워터 마크 텍스트 것 변경할 수 있습니다 있다?

위 코드는 Text = '여기에 텍스트 입력'으로 하드 코딩되어 있습니다.

나는 위의이 같은 사용하는 경우

,

<TextBox Style="{StaticResource WaterMarkTextBoxStyle}"></TextBox> 

사실은 워터 마크 텍스트가 무엇인지 설정할 수 없습니다.

아이디어가 있으십니까?

<TextBox Style="{StaticResource WaterMarkTextBoxStyle}" Watermark.Text="Search" /> 

스타일 다음 DP에 결합해야합니다 :

당신이 뭔가를 할 것입니다 귀하의 제어를 위해 그리고

public static class Watermark 
{ 
    public static readonly DependencyProperty TextProperty = 
     DependencyProperty.RegisterAttached("Text", 
              typeof(Boolean), 
              typeof(Watermark), 
              new FrameworkPropertyMetadata()); 

    public static void SetText(UIElement element, Boolean value) 
    { 
     element.SetValue(TextProperty, value); 
    } 

    public static Boolean GetText(UIElement element) 
    { 
     return (Boolean)element.GetValue(TextProperty); 
    } 
} 

:

답변

4

가 연결된 종속성 속성을 사용하여
<TextBlock x:Name="textBlock" Opacity="0.345" 
      Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(local:Watermark.Text)}" 
      TextWrapping="Wrap" Visibility="Hidden" /> 
관련 문제