微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用工具提示样式的depenceny属性设置文本?

如何解决如何使用工具提示样式的depenceny属性设置文本?

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

按钮的代码是这样的:

我的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" 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"
            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与父控件不在同一个可视树中。

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

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

也请检查您的XAML是否有错字。附加的属性类型在StackPanelToolTip样式上不匹配:ToolTipDependencyPropertyToolTipAttachedProperty

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。