【问题标题】:How to use depenceny property in the style of tooltip to set the text?如何使用 tooltip 样式中的 depenceny 属性来设置文本?
【发布时间】:2021-01-24 11:10:45
【问题描述】:

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

按钮的代码是这样的:

我的 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”。所以我想如果可以做与按钮相同的事情,使用依赖属性将信息从视图模型传递给样式。

谢谢。

【问题讨论】:

    标签: wpf dependency-properties wpf-style


    【解决方案1】:

    您当前没有绑定附加属性,您正在将 字符串 分配为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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2018-01-12
      • 2013-10-03
      • 2014-10-17
      • 1970-01-01
      • 2016-01-03
      相关资源
      最近更新 更多