如何在tooltip样式中使用depenceny 属性设置文字?

How to use depenceny property in the style of tooltip to set the text?

在一个按钮中,我正在使用一个依赖项属性将视图模型中的信息传递给按钮的样式,因此我可以根据某些条件设置颜色的颜色。

按钮的代码是这样的:

我的 xaml 文件中的样式:

<Style x:Key="BotonesColorEstadosTemplate" TargetType="{x:Type Button}">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type Button}">
        <ControlTemplate.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="dp:BotonesEstadosAttachedProperty.CodigoEstado" Value="0"/>
                    <Condition Property="dp:BotonesEstadosAttachedProperty.AccionHabilitada" Value="true"/>
                </MultiTrigger.Conditions>
            </MultiTrigger>
        <ContentTemplate>
    </ContentTemplate>
</Style>

依赖属性:

public static class BotonesEstadosAttachedProperty
{
    public static readonly DependencyProperty CodigoEstadoProperty =
        DependencyProperty.RegisterAttached(
        "CodigoEstado",
        typeof(short),
        typeof(BotonesEstadosAttachedProperty));

    public static short GetCodigoEstado(DependencyObject obj)
    {
        return (short)obj.GetValue(CodigoEstadoProperty);
    }

    public static void SetCodigoEstado(DependencyObject obj, short value)
    {
        obj.SetValue(CodigoEstadoProperty, value);
    }


    public static readonly DependencyProperty AccionHabilitadaProperty =
        DependencyProperty.RegisterAttached(
        "AccionHabilitada",
        typeof(bool),
        typeof(BotonesEstadosAttachedProperty));

    public static bool GetAccionhabilitada(DependencyObject obj)
    {
        return (bool)obj.GetValue(AccionHabilitadaProperty);
    }

    public static void SetAccionHabilitada(DependencyObject obj, bool value)
    {
        obj.SetValue(AccionHabilitadaProperty, value);
    }
}

如何在按钮中使用:

<Button Name="btnAlmacenesActualizar" Content="..." Height="23" Margin="3,0,0,0" Width="23"
    ap:BotonesEstadosDependencyProperty.CodigoEstado="{Binding CodigoEstadoActualizarAlmacenes}"
    ap:BotonesEstadosDependencyProperty.AccionHabilitada="{Binding EsAccionActualizarAlmacenesHabilitada}">

有了这个,我可以使用我的视图模型的 属性 并传递给我的样式,它使用触发器中的信息来设置按钮的颜色。

现在,我想要一个工具提示的样式,所有工具提示的默认配置,我想一开始可以传递工具提示的文本,但后来我想通过另一个变量。顺便说一句,为了测试,我想用文字试试。

我有这个风格:

<Style TargetType="ToolTip" x:Key="ToolTipDefaultStyle">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel>
                    <TextBlock>
                        <TextBlock.Style>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="Text" Value="dp:ToolTipAttachedProperty.Texto"/>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

带有工具提示的我的 StackPanel:

<StackPanel Name="spTiposIva" Orientation="Vertical" Margin="5,0,0,0"
            ap:ToolTipDependencyProperty.Texto="{Binding TiposIvaTooltip}">
    <StackPanel.ToolTip>
        <ToolTip Style="{StaticResource ToolTipDefaultStyle}"/>
    </StackPanel.ToolTip>
</StackPanel>

但在这种情况下,显示的文本是“dp:ToolTipAttachedProperty.Texto”。所以我想如果可以做与按钮相同的事情,使用依赖属性将信息从视图模型传递到样式。

谢谢。

您目前没有绑定附加的 属性,您正在将 字符串 分配为 Value。要绑定到 附加属性 ,您需要使用绑定标记扩展 and parentheses,例如:

<Setter Property="Text" Value="{Binding (dp:ToolTipAttachedProperty.Texto)"/>

但是,在您的情况下,您需要引用 ToolTip 的父控件,您的 属性 附加到该控件。通常,您会使用 RelativeSource 绑定和 AncestorType 来执行此操作,但这在这里不起作用,因为 ToolTip 与父控件不在同一可视化树中。

相反,您可以通过父级 ToolTip 上的 PlacementTarget 属性 访问控件。

<Setter Property="Text" Value="{Binding PlacementTarget.(dp:ToolTipAttachedProperty.Texto), RelativeSource={RelativeSource AncestorType={x:Type ToolTip}}}"/>

另请检查您的 XAML 是否有拼写错误。附加属性类型在 StackPanelToolTip 样式中不匹配:ToolTipDependencyPropertyToolTipAttachedProperty?