问题描述
在按钮中,我正在使用依赖项属性将信息从视图模型传递到按钮的样式,因此我可以根据某些条件设置颜色。
按钮的代码是这样的:
我的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是否有错字。附加的属性类型在StackPanel
和ToolTip
样式上不匹配:ToolTipDependencyProperty
或ToolTipAttachedProperty
?