本帖只考虑 附加属性 知识点 其余知识点和架构设置不在此讨论范围内 附加属性是特殊的依赖项属性 是对已有控件的扩展
public class AttachedPropertyClass : DependencyObject
{
public static string GetAttachedPropertyName(DependencyObject obj)
{
return (string)obj.GetValue(AttachedPropertyNameProperty);
}
public static void SetAttachedPropertyName(DependencyObject obj, string value)
{
obj.SetValue(AttachedPropertyNameProperty, value);
}
public static readonly DependencyProperty AttachedPropertyNameProperty =
DependencyProperty.RegisterAttached("AttachedPropertyName", typeof(string), typeof(AttachedPropertyClass), new PropertyMetadata(callback));
private static void callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var _Button = d as Button;
_Button.Content = e.NewValue.ToString() + "调用";
_Button.Foreground = new SolidColorBrush(Colors.Red);
}
}
<Button Name="bt" Content="调用" Width="75" Height="35" local:AttachedPropertyClass.AttachedPropertyName="大庆油田">
<Button.Template>
<ControlTemplate TargetType="Button">
<TextBlock Text="{TemplateBinding Content}"/>
</ControlTemplate>
</Button.Template>
</Button>
当然也可以直接绑定在附加属性上
<Button Content="调用" Width="75" Height="35" local:AttachedPropertyClass.AttachedPropertyName="大庆油田">
<Button.Template>
<ControlTemplate TargetType="Button">
<TextBlock Text="{TemplateBinding local:AttachedPropertyClass.AttachedPropertyName}"/>
</ControlTemplate>
</Button.Template>
</Button>
也可以加上默认值 在没有设置对应值时使用的默认值
new PropertyMetadata("股份公司",callback)
需要注意的一点是 当其他元素绑定到此元素时需使用()括起来
比如:
<TextBlock Text="{Binding ElementName=bt,Path=(local:AttachedPropertyClass.AttachedPropertyName)}"/>
TemplateBinding 除外