繁体   English   中英

使用Validation.HasError覆盖工具提示模板

[英]Using Validation.HasError to override Tooltip template

我到过的任何地方,都找到了将ToolTip附加到绑定具有Validation.HasError == true的控件的标准解决方案,但没有地方显示出如何完全覆盖ToolTip的模板,例如,您仍然可以您自己的自定义主题会覆盖所有工具提示的样式,但是当控件具有特定条件时,您可以指定一个模板,该模板具有红色边框,红色透明背景和红色文本。

标准解决方案是:

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

有谁知道如何扩展它来设置ToolTip背景,边框和文本颜色,而不覆盖基本ToolTip控件样式? 请记住,我已经指定了它来创建自己的“主题”,所以我不想更改它。

是的,您可以这样做:

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

MyInheritedStyleForValidation可能应该覆盖主题样式的地方。

将工具提示的DataContext设置为父控件:

<Style.Triggers>
    <Trigger Property="Validation.HasError" Value="True">
        <Setter Property="ToolTip">
            <Setter.Value>
                <ToolTip Foreground="White"
                         Background="Black"
                         DataContext="{Binding Path=PlacementTarget, RelativeSource={RelativeSource Self}}"
                         Content="{Binding Path=(Validation.Errors)[0].ErrorContent}"/>
            </Setter.Value>
        </Setter>
    </Trigger>
</Style.Triggers>

这将修复工具提示内容。

 <Style x:Key="{x:Type FrameworkElement}" TargetType="FrameworkElement">
    <Setter Property="ToolTip" Value="{Binding GeneralTooltip}"/>
       <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ValidationTemplate}"/>            
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
             <Setter Property="ToolTip">
                    <Setter.Value>
                        <ToolTip  Style="{StaticResource WarningTooltip}"/>
                    </Setter.Value>
             </Setter>
                <Setter Property="Tag" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Style>

他的风格的工具提示模板:

<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToolTip}">                      
                                    <!--Display the text-->
                                    <Label Background="Transparent" 
                                         BorderThickness="0" 
                                         VerticalAlignment="Center"
                                         Grid.Column="1"                                            
                                         Content="{Binding Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Control}, AncestorLevel=2}}"                                            
                                         BorderBrush="Transparent"/>
                </ControlTemplate>
            </Setter.Value>
 </Setter>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM