簡體   English   中英

文本框上的XAML Controltemplate,文本框上的Datatrigger

[英]XAML Controltemplate on Textbox, Datatrigger on textbox

我創建了一個自定義TextBox ,我想要設置它的樣式,並為此TextBox添加一個Watermark。 我想在TextBox為空時添加水印,這個可見性只能從我的Style設置。 這是我的風格:

<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>

樣式按預期應用,但我很難在TextBlock定義DataTrigger綁定。 我應該綁定什么?

你應該使用ControlTemplate觸發器。 您需要檢查文本是否為空,但如果文本框沒有焦點,則需要多項組合:

這是我的水印文本框樣式,我使用Tag屬性指定水印文本:

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM