更新:找到解决方案,见下文!
我尝试实现以下行为:
UserControl中有几个TextBox。每个TextBox-ToolTip都应显示一个特定的字符串,该字符串位于Resource.resx文件中。 如果此TextBox的Valdiation返回错误,则返回的错误字符串将显示在工具提示中。 这应该使用Style来完成。我当前的状态是,我可以显示特定的Validation.Errors和默认工具提示,这对于使用该样式的每个TextBox都是相同的。
所以我的风格是:
<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部分
<Style TargetType="{x:Type TextBox}">
<Setter Property="ToolTip" Value="ExampleToolTip"/>
...
</Style>
是TextBox特定的。
我尝试为我的TextBox编写一个Attatched属性,这样我就可以定义第二个字符串,它应该用作标准的ToolTip。
附属物业代码如下所示:
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。我尝试了几种Bindings组合但没有成功。有没有办法实现这种行为?
答案 0 :(得分:0)
一个想法,你可以在输入控件周围的ControlTemplate
中放置一个BorderThickness
为0的隐藏边框,提供错误工具提示。如果出现错误,则将可见性设置为可见,并显示错误工具提示。
这只是一个想法,但它可能有用。
答案 1 :(得分:0)
我设法通过命名所有TextBox并向我的TextBox-Style添加多个Triggers来获得所需的行为。代码如下:
<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>