2015-09-17 115 views
0

我已經創建了一個自定義TextBox,我想對此進行設計,併爲此TextBox添加水印。我想在TextBox爲空時添加水印,這種可見性只能從我的Style設置。這是我的風格:文本框上的XAML控件模板,文本框上的數據查詢器

<Style TargetType="{x:Type textboxes:CustomTextBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type textboxes:CustomTextBox}"> 
       <Grid> 
        <Border Name="Border" 
          CornerRadius="2" 
          Padding="2" 
          Background="DeepPink" 
          BorderBrush="Green" 
          BorderThickness="1"> 
         <Grid> 
          <ScrollViewer Margin="0" 
              x:Name="PART_ContentHost" /> 
          <TextBlock IsHitTestVisible="False" 
             Text="WATERMARK!" 
             Foreground="White" 
             VerticalAlignment="Center" 
             HorizontalAlignment="Left" 
             Margin="10,0,0,0"> 
           <TextBlock.Style> 
            <Style TargetType="{x:Type TextBlock}"> 
             <Setter Property="Visibility" 
               Value="Collapsed" /> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding Text, ElementName=PART_ContentHost}" 
                 Value=""> 
               <Setter Property="Visibility" 
                 Value="Visible" /> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </TextBlock.Style></TextBlock> 
         </Grid> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

預期的樣式應用,但我很難定義DataTrigger的TextBlock內結合。我應該綁定什麼?

回答

2

您應該改用ControlTemplate觸發器。你需要檢查,如果文本爲空,而且如果文本行的也沒有重點,所以multitrigger要求:

這裏是我使用的標籤屬性來指定水印文字我的水印文本框風格:

<Style x:Key="WatermarkTextBox" TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Tag" Value="Enter Text" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="TextBox"> 
       <Grid> 
        <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
         <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/> 
        </Border> 

        <TextBlock x:Name="Watermark" Text="{TemplateBinding Tag}" 
          Visibility="Collapsed" IsHitTestVisible="False" Opacity="0.5" 
          Foreground="{TemplateBinding Foreground}" 
          Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
          TextAlignment="{TemplateBinding TextAlignment}"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsKeyboardFocusWithin" Value="False" /> 
          <Condition Property="Text" Value="" /> 
         </MultiTrigger.Conditions> 
         <Setter TargetName="Watermark" Property="Visibility" Value="Visible" /> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

謝謝!回答upvoted和接受。 –