完全来源于十月的寒流,感谢大佬讲解
依赖属性
由依赖属性提供的属性功能
与字段支持的属性不同,依赖属性扩展了属性的功能。 通常,添加的功能表示或支持以下功能之一:
- 资源
- 数据绑定
- 样式
- 动画
- 元数据重写
- 属性值继承
- WPF 设计器集成
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CustomTextBox customTextBox = new CustomTextBox();
customTextBox.IsHightLighted = true;
customTextBox.SetValue(CustomTextBox.IsHightLightedProperty, true);
}
}
public class CustomTextBox : TextBox
{
public bool IsHightLighted
{
get { return (bool)GetValue(IsHightLightedProperty); }
set { SetValue(IsHightLightedProperty, value); }
}
public static readonly DependencyProperty IsHightLightedProperty =
DependencyProperty.Register("IsHightLighted", typeof(bool), typeof(CustomTextBox), new PropertyMetadata(false));
}
#region HasText
public bool HasText => (bool)GetValue(HasTextProperty);
public static readonly DependencyProperty HasTextProperty;
public static readonly DependencyPropertyKey HasTextPropertyKey;
static CustomTextBox()
{
HasTextPropertyKey = DependencyProperty.RegisterReadOnly(
"HasText",
typeof(bool),
typeof(CustomTextBox),
new PropertyMetadata(false)
);
HasTextProperty = HasTextPropertyKey.DependencyProperty;
}
#endregion
<Window x:Class="Test_05.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Test_05"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="local:CustomTextBox">
<Style.Triggers>
<Trigger Property="IsHightLighted" Value="True">
<Setter Property="Background" Value="Yellow"></Setter>
</Trigger>
<Trigger Property="IsHightLighted" Value="False">
<Setter Property="Background" Value="Blue"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<local:CustomTextBox Text="Hello World!" FontSize="30" IsHightLighted="True"></local:CustomTextBox>
</StackPanel>
</Window>
附加属性
<StackPanel>
<!--<local:CustomTextBox Text="Hello World!" FontSize="30" IsHightLighted="True"></local:CustomTextBox>-->
<local:CustomTextBox Text="Hello World!" FontSize="30">
<local:CustomTextBox.IsHightLighted>
true
</local:CustomTextBox.IsHightLighted>
<Grid.Row>1</Grid.Row>
</local:CustomTextBox>
</StackPanel>