C#--WPF自定义控件模板示例
1.UI代码
<Button Background="Black" BorderBrush="Transparent" Padding="0" HorizontalContentAlignment="Left" Style="{StaticResource ButtonEmpty}"Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:Valve1h}}, Path=ValueCmd}"CommandParameter="{Binding ElementName=ID,Path=Text }" Cursor="Hand" IsHitTestVisible="True"/>
注释:属性绑定释义
Command--Ancestor 查找绑定至自定义控件Valve1h,实体命令绑定本地自建依赖属性ValueCmd
CommandParameter--绑定本地TextBlock控件Name为ID,Path为其文本值
2.cs代码
2.1 string依赖属性及属性值变化回调函数
public static readonly DependencyProperty ValueLabelProperty =DependencyProperty.Register("ValueLabel", typeof(string),typeof(Valve1h), new PropertyMetadata("00", new PropertyChangedCallback(OnLabelChanged)));//CHANGEDpublic string ValueLabel{get { return (string)GetValue(ValueLabelProperty); }set { SetValue(ValueLabelProperty, value); }}static void OnLabelChanged(object sender, DependencyPropertyChangedEventArgs args){Valve1h source = (Valve1h)sender;//CHANGEDsource.ID.Text = (string)args.NewValue;//CHANGED}
2.2 Bool依赖属性及属性值变化回调函数
public static readonly DependencyProperty ValueBitProperty =DependencyProperty.Register("ValueBit", typeof(bool),typeof(Valve1h), new PropertyMetadata(false, new PropertyChangedCallback(OnBitChanged)));//CHANGED--属性变化回调函数public bool ValueBit{get { return (bool)GetValue(ValueBitProperty); }set { SetValue(ValueBitProperty, value); }}static void OnBitChanged(object sender, DependencyPropertyChangedEventArgs args){Valve1h source = (Valve1h)sender;//CHANGEDif ((bool)args.NewValue)source.ValveShape.Fill = Brushes.GreenYellow;elsesource.ValveShape.Fill = Brushes.SteelBlue; //CHANGED}
2.3 Command依赖属性
public static readonly DependencyProperty ValueCmdProperty =DependencyProperty.Register("ValueCmd", typeof(ICommand),typeof(Valve1h), new FrameworkPropertyMetadata() { BindsTwoWayByDefault = true });//CHANGEDpublic ICommand ValueCmd{get { return (ICommand)GetValue(ValueCmdProperty); }set { SetValue(ValueCmdProperty, value); }}