XAML 文本长度>0时触发

vom3gejh  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(179)

TextBox.Length〉0时,尝试使用MultiDataTrigger隐藏TextBox中的水印文本

<Style.Triggers>    
     <MultiDataTrigger>
         <MultiDataTrigger.Conditions>
              <Condition Binding="{Binding ElementName=SearchTermTextBox, UpdateSourceTrigger=PropertyChanged, Path=Text.Length}"
                                           Value="1"/>

                                <Condition Binding="{Binding IsMouseOver, ElementName=SearchTermTextBox, UpdateSourceTrigger=PropertyChanged}"
                                           Value="true"/>                                                          
                 </MultiDataTrigger.Conditions>
             <Setter Property="Visibility"
                     Value="Collapsed"/>
            </MultiDataTrigger>
     </Style.Triggers>

这显然只在text.Length = 1时有效。有没有简单的方法来实现这一点,或者我需要写一个IValueConverter的实现?

polkgigr

polkgigr1#

那么反过来呢?默认情况下不显示水印,让你的触发器在Text.Length = 0时显示水印?

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        x:Name="MyWindow"
        Title="MainWindow"
        Height="200" Width="400">

    <Window.Resources>
        <Style x:Key="TestTextStyle" TargetType="{x:Type TextBlock}">
            <Setter Property="Visibility" Value="Collapsed" />
            <Setter Property="Margin" Value="2" />
            <Setter Property="IsHitTestVisible" Value="False" />
            <Setter Property="Foreground" Value="Silver" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=SearchTermTextBox, UpdateSourceTrigger=PropertyChanged, Path=Text.Length}" Value="0">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

    <Grid Margin="10">
        <TextBox Name="SearchTermTextBox" />
        <TextBlock Style="{StaticResource TestTextStyle}" Text="Test Watermark" />
    </Grid>
</Window>

第一节第一节第一节第一节第一次
只需确保将初始Visibility=Collapsed设置为Style的一部分,而不是硬编码到<TextBlock />标记中,因为DependencyProperty Precedence声明在<Tag>中设置的所有属性都具有比在Trigger中设置的属性更高的优先级,因此该值永远不会更改。

相关问题