2

更新:找到解决方案,见下文!

我正在尝试实现以下行为:

用户控件中有几个文本框。每个 TextBox-ToolTip 都应该显示一个特定的字符串,该字符串位于 Resource.resx 文件中。如果此 TextBox 的验证返回错误,则返回的错误字符串将显示在 ToolTip 中。这应该使用样式来完成。我目前的状态是,我可以显示特定的 Validation.Errors 和一个默认的工具提示,这对于每个使用样式的文本框都是相同的。

所以我的风格是:

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="ToolTip" Value="ExampleToolTip"/>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip"
                Value="{Binding RelativeSource={RelativeSource Self},
                 Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

使用这种风格,我得到了上述行为。

现在我想要样式部分

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="ToolTip" Value="ExampleToolTip"/>
    ...
</Style>

是特定于文本框的。

我尝试为我的文本框编写一个附加属性,以便我可以定义第二个字符串,它应该用作标准工具提示。

附加属性代码如下所示:

public class TextBox2 : DependencyObject
    {
        public static void SetToolTipStandard(TextBox target, string value)
        {
            target.SetValue(ToolTipStandardProperty, value);
        }

        public static string GetToolTipStandard(TextBox target)
        {
            return (string)target.GetValue(ToolTipStandardProperty);
        }

        public static DependencyProperty ToolTipStandardProperty = DependencyProperty.RegisterAttached(
            "ToolTipStandard",
            typeof(string),
            typeof(TextBox),
            new PropertyMetadata());
    }

现在我想在 XAML 中的 TextBoxes 上设置 TextBox2.ToolTipStandard 属性,并且 TextBox-Style 应该使用此属性来设置默认的 ToolTip-Text。我尝试了几种绑定组合,但没有成功。有没有办法实现这种行为?

4

2 回答 2

0

一个想法,您可以在提供错误工具提示的输入控件周围放置一个ControlTemplate带有0 的隐藏边框。BorderThickness如果出现错误,您将可见性设置为可见并显示错误工具提示。

这只是一个想法,但它可能会奏效。

于 2012-11-09T15:39:49.270 回答
0

我设法通过命名我的所有文本框并将多个触发器添加到我的文本框样式来获得所需的行为。代码如下:

<UserControl.Resources>
    <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <!--Here are the static resource strings for the normal-state ToolTip-->
                <Trigger Property="Name" Value="TextBox1">
                    <Setter Property="ToolTip" Value="{x:Static properties:UIStrings.TextBox1_ToolTip_String}"/>
                </Trigger>
                <Trigger Property="Name" Value="TextBox2">
                    <Setter Property="ToolTip" Value="{x:Static properties:UIStrings.TextBox2_ToolTip_String}"/>
                </Trigger> ...

                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </UserControl.Resources>
于 2012-11-12T14:47:53.887 回答