TextBox 触发器使用样式清除文本

发布于 2024-12-04 14:50:08 字数 854 浏览 1 评论 0原文

首先,我已经使用 WPF 大约一周了。我想设置一个文本框的样式,以便在禁用它时将其清除。 这篇文章解释了如何做到这一点,但是我对如何做感到困惑将通用样式设置为资源,以便每个 TextBox 都可以绑定到不同的属性,而无需为每个 TextBox 重复样式。

<Window.Resources>
        <Style TargetType="{x:Type TextBox}" x:Key="style1">
            <Setter Property="Text" Value="{What do I really put here?}" /> 
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Text" Value="{x:Null}" /> 
                </Trigger>
            </Style.Triggers>
        </Style> 
    </Window.Resources>

....

<TextBox Style="{StaticResource style1}" Text="{Binding SomeProperty}"/>

谢谢!

First, let me say I've been working with WPF for about a week. I want to style a TextBox so that when it is disable, it is cleared. This article explained how to do it, however I'm confused on how to set the generic style as a resource so that every TextBox can bind to a different property without repeating the style for each TextBox.

<Window.Resources>
        <Style TargetType="{x:Type TextBox}" x:Key="style1">
            <Setter Property="Text" Value="{What do I really put here?}" /> 
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Text" Value="{x:Null}" /> 
                </Trigger>
            </Style.Triggers>
        </Style> 
    </Window.Resources>

....

<TextBox Style="{StaticResource style1}" Text="{Binding SomeProperty}"/>

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

假情假意假温柔 2024-12-11 14:50:08

您将无法像这样使用 Text 属性。在具有该样式的任何 TextBox 上显式设置 Text 属性将覆盖触发器中的 Text 设置器(就像您注意到的那样)。

如果您只需要清除 TextBox 而不是它所绑定的属性,则解决方法是为您要清除的文本使用附加属性(或 Tag)。将 Text 绑定到 Style 中。
例如..

<Style TargetType="{x:Type TextBox}" x:Key="style1">
    <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Self},
                                            Path=Tag}"/>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Text" Value="{x:Null}" />
        </Trigger>
    </Style.Triggers>
</Style>

然后 TextBox 可以使用这个 Style 就像

<TextBox Style="{StaticResource style1}" Tag="{Binding SomeProperty}" />

You won't be able to use the Text property like that. Setting the Text property explicitly on any TextBox that has that style will override the Text setter in the trigger (like you noticed).

If you only need the TextBox to be cleared and not the property it is binding to, then a workaround is to use an attached property (or Tag) for the text which you bind Text to in the Style.
Example..

<Style TargetType="{x:Type TextBox}" x:Key="style1">
    <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Self},
                                            Path=Tag}"/>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Text" Value="{x:Null}" />
        </Trigger>
    </Style.Triggers>
</Style>

Then a TextBox can use this Style like

<TextBox Style="{StaticResource style1}" Tag="{Binding SomeProperty}" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文