【问题标题】:cannot set tooltip in style无法在样式中设置工具提示
【发布时间】:2011-07-15 10:30:24
【问题描述】:

我搜索并发现我无法直接在 setter.value 中设置工具提示(在 style.xaml 文件中)。但是我可以使用静态资源来设置工具提示。

我的问题是,因为我需要为工具提示提供动态文本,所以我不能使用静态资源。我该怎么做?

这是我的例子。

    <Style x:Key="ErrorStyleRadius" TargetType="{x:Type FrameworkElement}">
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding (Validation.HasError), RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
                <Condition Binding="{Binding (Validation.Errors), RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource IsError}}" Value="True"/>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="ToolTip">
                    <Setter.Value>
                        <ToolTip>
                            <Label Content="{Binding somePropertyHere}"/>
                        </ToolTip>
                    </Setter.Value>
                </Setter>
                <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorControlTemplateRadiusError}"/>
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>

        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding (Validation.HasError), RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
                <Condition Binding="{Binding (Validation.Errors), RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource IsWarning}}" Value="True"/>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors), Converter={StaticResource ValMsg}}"/>
                <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorControlTemplateRadiusWarning}"/>
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

对于用法,我可以用作

<textbox style={staticresource ErrorStyleRadius} text={bind name, validationOnDataError=true}/>

【问题讨论】:

    标签: wpf xaml styles multidatatrigger


    【解决方案1】:

    如果您想像这样将文本设置为 Validation.Error,也可以从您的样式中设置工具提示 -

    <Trigger Property="Validation.HasError" Value="True">
           <Setter Property="ToolTip"
                   Value="{Binding RelativeSource={RelativeSource Self},
                           Path=(Validation.Errors)[0].ErrorContent}" />
    </Trigger>
    

    【讨论】:

    • 谢谢。但我想用图像自定义工具提示,例如,不仅仅是文本
    【解决方案2】:

    你为什么不试试这个 -

    <ToolTip x:Key="MyToolTip"
             DataContext={Binding PlacementTarget, RelativeSource={RelativeSource Self}}>
      <Label Content="{Binding Text}"/>
    </ToolTip>
    
    <Style x:Key="ErrorStyleRadius" TargetType="{x:Type FrameworkElement}">
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding (Validation.HasError), RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
                    <Condition Binding="{Binding (Validation.Errors), RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource IsError}}" Value="True"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="ToolTip" Value={StaticResource MyToolTip}>
                    </Setter>
                    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorControlTemplateRadiusError}"/>
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
    

    您可以在 StaticResource 中给出属性名称。它将动态更新工具提示。

    【讨论】:

    • 感谢您的回答。我的情况的一个区别是我想将工具提示文本绑定到对应控件中的附加属性 (Validation.Errors),而不是数据上下文。所以我需要先找到控件的父相关资源。但是,在静态资源中查找父相关资源是,我不知道怎么做,不可能? (因为不在名称范围内?)
    • 您甚至可以通过将工具提示的数据上下文设置为其 PlacementTarget(Parent RelatedResource) 来绑定到附加属性。我已经更新了我的答案,看看它。我现在绑定到附加的属性文本。同样的方式你可以绑定到(Validation.Errors)。希望这是你想要的!!
    • 您好,感谢您一直以来的努力帮助我。为了清楚起见,我想绑定到(Validation.Errors)“父控件”。正如在答案中,我看到 {RelativeSource Self},而不是 FindAncester。不确定这是否仍然适用于静态资源。但无论如何,我会尝试你的方式,看看如何解决我的问题。再次感谢您。
    • 我将数据上下文绑定到附加属性“PlacementTarget”。它找到应用了工具提示的父级。我在小型应用程序中尝试了这个,它对我有用,甚至绑定到 (Validation.Errors)[0].ErrorContent 确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2019-01-18
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多