空文本框默认文本



在我的 Window.Resources 中,我有以下风格:

    <Style TargetType="TextBox" x:Key="HintText" xmlns:sys="clr-namespace:System;assembly=mscorlib">
        <Style.Resources>
            <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
                <VisualBrush.Visual>
                    <Label Content="{DynamicResource EmptyText}" Foreground="LightGray" />
                </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>

如果我用这个将它用于 1 个文本框,

<Label Content="Test" Foreground="LightGray" />

如果测试为空,它将显示在我的文本框中。当我尝试在不同的文本框中使用此样式时,

<Label Content="{DynamicResource EmptyText}" Foreground="LightGray" />

<TextBox.Resources>
    <sys:String x:Key="EmptyText">Test</sys:String>
</TextBox.Resources>

它没有显示任何内容。是否可以将此 1 样式与文本框中显示的不同字符串一起使用,还是必须为每个文本框制作不同的样式?

你似乎没有在你给出的任何示例中使用这种样式,并且根本不清楚你的最后一个 XAML 块与它前面的 XAML 块有什么关系。

但是,是的,您应该能够根据需要随时重新定义EmptyTextText属性将根据依赖项属性值优先级规则进行解析。

所以你可以做这样的事情:

<DockPanel HorizontalAlignment="Stretch">
    <DockPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Text"
                    Value="{DynamicResource EmptyText/>
        </Style>
        <sys:String x:Key="EmptyText">Defined in the Dockpanel resource</sys:String>
    </DockPanel.Resources>
    <TextBlock/>
    <TextBlock>
        <TextBlock.Resources>
            <sys:String x:Key="EmptyText">Defined in the textbox resource</sys:String>
        </TextBlock.Resources>
    </TextBlock>
    <TextBlock>
        <TextBlock.Resources>
            <sys:String x:Key="EmptyText">Also defined at the textbox</sys:String>
        </TextBlock.Resources>
    </TextBlock>
</DockPanel>

相关内容

  • 没有找到相关文章

最新更新