WPF的依赖属性

4 篇文章 0 订阅

一、依赖属性

1.依赖属性是什么

依赖属性是一种自己可以没有值,但是可以通过绑定数据源获取值的属性;它可以支持样式设置、数据绑定、结合绑定一起实时数据更新UI显示、动画、自定义控件等。

2.依赖属性与普通属性区别

  • 依赖属性对普通属性进行了包装,使得我们可以用和以前一样的方式来使用依赖属性。

  • 在WinForm的UI控件类包含很多属性,实际上每次只是使用一部分属性,但是每个控件的属性都会赋予初始值,这白白消耗内存资源。

  • WPF的依赖属性内部使用哈希表存储机制,对多个相同控件的相同属性的值都只保存一份,从而节约资源。

3.依赖属性的优先级

WPF允许在多个地方设置依赖属性的值,这样就涉及到依赖属性获取值的优先级问题。

依赖属性设置的优先级按从高到低排序依次为:

属性系统强制转换、动画、本地值、模板属性、隐式样式、样式触发器、模板触发器、样式、继承和默认值。

二、依赖属性的使用

1.依赖属性对样式的支持

通过样式的方式设置Button的Background背景颜色为OldLace。

代码如下(示例):

App.xaml

    <Application.Resources>
        <Style x:Key="ButtonStyle">
            <Setter Property="Control.Background" Value="OldLace"></Setter>
        </Style>
    </Application.Resources>

MainWindow.xaml

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <Button  Name="btn1"  Style="{StaticResource ButtonStyle}">依赖属性对样式的支持</Button>
        </StackPanel>
    </Grid>

效果图:

2.依赖属性对资源引用的支持

通过对资源引用的方式设置Button的Background数值为Orange。

代码如下(示例):

APP.xaml

    <Application.Resources>
        <SolidColorBrush x:Key="BtnBrush" Color="Orange"/>
    </Application.Resources>

MainWindow.xaml

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <Button  Name="btn2"  Background="{DynamicResource BtnBrush}">依赖属性对资源引用的支持</Button>
        </StackPanel>
    </Grid>

3.依赖属性对动画的支持

代码如下(示例):

MainWindow.xaml

    <Grid >
        <Button Height="30" Width="200">鼠标移动到上面,前景色变为红色
            <Button.Style>
                <Style TargetType="Button">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Foreground" Value="Red"></Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </Grid>

效果图:

4.依赖属性对属性值继承的支持

  • 先保留Window窗体默认的字体大小,第一按钮将窗台的FontSize改为18;

  • 第二个按钮将该控件本身FontSize改为15;

  • 第三个按钮复原窗体的FontSize。

代码如下(示例):

MainWindows.xaml

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Button Grid.Row="0" Name="btn1" Height="50" Width="150" Click="Btn_SetFontSize">Set the window font</Button>
        <Button Grid.Row="1" Name="btn2" Height="50" Width="150" Click="Btn_SetButtonFont">Set the button font</Button>
        <Button Grid.Row="2" Name="btn3" Height="50" Width="150" Click="Btn_ResetFontSize">Reset the font</Button>
    </Grid>

MainWindows.xaml.cs

    public partial class MainWindow : Window
    {
        private double fontSize = 0;
        public MainWindow()
        {
            InitializeComponent();
            fontSize = this.FontSize;
        }

        private void Btn_SetFontSize(object sender, RoutedEventArgs e)
        {
            this.FontSize =18 ;
        }

        private void Btn_SetButtonFont(object sender, RoutedEventArgs e)
        {
            this.btn2.FontSize = 15;
        }

        private void Btn_ResetFontSize(object sender, RoutedEventArgs e)
        {
            this.FontSize = fontSize;
            this.btn3.FontSize = fontSize;
        }
    }

5.依赖属性对数据绑定的支持

下面例子展示如何绑定 TextBlock 的值以匹配 TextBox 的 Text 属性:

  • 在WrapPanel面板中,第二TextBlock控件的绑定路径Binding Path为改控件的Text属性,绑定源控件是Name为txtValue的TextBox控件;

  • 当你在 TextBox 中输入文本时,TextBlock 也会跟随TextBox的Text属性内容自动更新。

代码如下(示例):

MainWindows.xaml

    <StackPanel Margin="10">
        <TextBox Name="txtValue" />
        <WrapPanel Margin="0,10">
            <TextBlock Text="Value: " FontWeight="Bold" />
            <TextBlock Text="{Binding Path=Text, ElementName=txtValue}" />
        </WrapPanel>
    </StackPanel>

效果图:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜飞鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值