WPF附加属性

附加属性是特殊的依赖属性
用于非定义该属性的类 例如Grid面板的RowDefinition、ColumnDefinition
Canvas面板的Left、Right
DockPanel面板的Dock都是附加属性。

代码演示:
XAML代码:

<UserControl x:Class="WenXian.FuJiaShuXing "
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:p="clr-namespace: WenXian"
mc:Ignorable="d" 
d:DesignHeight="300" d:DesignWidth="300">
     <Grid>
         <StackPanel>
             <TextBox p:FuJiaShuXing.MyAttachedFontSize="{Binding Path=Text,
                 RelativeSource={RelativeSource Mode=Self}}" ></TextBox>
             <TextBlock>通过附加属性修改FontSize的大小</TextBlock>
         </StackPanel>
     </Grid>
 </UserControl>

设计界面:

在FuJiaShuXing.xaml.cs文件里面添加附件属性,附件属性的名称为MyAttachedFontSize,使用快捷方式创建附件属性:输入propa,连续按两下Tab键。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WenXian
{
    /// <summary>
    /// FuJiaShuXing.xaml 的交互逻辑
    /// </summary>
    public partial class FuJiaShuXing : UserControl
    {
        public FuJiaShuXing()
        {
            InitializeComponent();
        }

 
 
         public static int GetMyAttachedFontSize(DependencyObject obj)
         {
             return (int)obj.GetValue(MyAttachedFontSizeProperty);
         }
 
         public static void SetMyAttachedFontSize(DependencyObject obj, int value)
         {
             obj.SetValue(MyAttachedFontSizeProperty, value);
         }

         public static readonly DependencyProperty MyAttachedFontSizeProperty =
             DependencyProperty.RegisterAttached("MyAttachedFontSize", typeof(int), typeof(FuJiaShuXing),
             new PropertyMetadata((s, e) => 
             {
                 //获取FuJiaShuXing用户控件,s代表Textbox,
                 // FuJiaShuXing用户控件是TextBox的父级的父级的父级控件
                 var mdp = (((s as FrameworkElement).Parent as FrameworkElement).Parent
                     as FrameworkElement).Parent as FuJiaShuXing;
                 //更改用户控件的FontSize的值
                 if (mdp != null && e.NewValue != null)
                 {
                     var fontsize = 9;
                     int.TryParse(e.NewValue.ToString(), out fontsize);
                     mdp.FontSize = fontsize;
                 }
             }));
 
         
     }
 }

3、在主界面测试附件属性:

 <Window x:Class="WenXian.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:p="clr-namespace:WenXian"
          Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen">
      <Grid >
          <StackPanel>
              <TextBlock>请输入字体的大小</TextBlock>
             <p:FuJiaShuXing></p:FuJiaShuXing>
         </StackPanel>        
     </Grid>
 </Window>

程序运行效果:
在TextBox里面输入3:
在这里插入图片描述

在TextBox里面输入30:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值