Wpf 空文本框默认文本

Wpf 空文本框默认文本,wpf,dynamic,binding,static,styles,Wpf,Dynamic,Binding,Static,Styles,在我的窗口中。资源我有以下样式: <Style TargetType="TextBox" x:Key="HintText" xmlns:sys="clr-namespace:System;assembly=mscorlib"> <Style.Resources> <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stret

在我的窗口中。资源我有以下样式:

    <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" />
测试将显示在我的文本框中,如果它是空的。当我尝试在不同的文本框中使用此样式时

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


它没有显示任何东西。是否可以将此1样式与文本框中显示的不同字符串一起使用,或者我必须为每个文本框创建不同的样式?

在您给出的任何示例中,您似乎都没有使用此样式,并且还不清楚最后一个XAML块与之前的XAML块之间的关系

但是,是的,您应该能够随时重新定义EmptyText。文本属性将根据规则解决

所以你可以这样做:

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

如果样式在Window.resources中呢?这个还能用吗?你的画笔有点问题。可以使用Snoop查看笔刷是否已应用。不要为这种风格而烦恼;将画笔直接应用于文本框,并使其按照您希望的方式工作。您也可以查看或。只要标签的内容没有绑定,我就可以使用该样式。Writing Content=Test将使用提示文本测试对文本框执行我想要的操作。如果我想要另一个文本而不是Test,我要么复制样式,要么更改样式的内容和名称,但这对我来说效率很低。这是基于我在第一条消息中的原始代码,我可以复制您描述的行为;我没有很好的解释。有很多更好的方法来达到你想要达到的行为。你可以读到其中一些。如果你真的必须坚持这种方法,你会发现,如果你让可视化笔刷成为你的动态资源,而不是提示字符串,并在每个控件中定义一个,它就会像你期望的那样工作。。。有很多方法可以创造这些,你可以找到他们的问题。。。我相信你会发现,至少有一些比你提出的解决方案更好。