关于wpf:公开DependencyProperty

关于wpf:公开DependencyProperty

Expose DependencyProperty

开发WPF UserControls时,将子控件的DependencyProperty公开为UserControl的DependencyProperty的最佳方法是什么? 下面的示例显示我当前如何在UserControl内部公开TextBox的Text属性。 当然有更好/更简单的方法可以做到这一点吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<UserControl x:Class="WpfApplication3.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Background="LightCyan">
        <TextBox Margin="8" Text="{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
    </StackPanel>
</UserControl>


using System;
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication3
{
    public partial class UserControl1 : UserControl
    {
        public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(UserControl1), new PropertyMetadata(null));
        public string Text
        {
            get { return GetValue(TextProperty) as string; }
            set { SetValue(TextProperty, value); }
        }

        public UserControl1() { InitializeComponent(); }
    }
}


这就是我们在团队中进行此操作的方法,而无需使用RelativeSource搜索,而是通过命名UserControl并通过UserControl的名称引用属性来实现。

1
2
3
4
5
6
7
<UserControl x:Class="WpfApplication3.UserControl1" x:Name="UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Background="LightCyan">
        <TextBox Margin="8" Text="{Binding Path=Text, ElementName=UserControl1}" />
    </StackPanel>
</UserControl>

有时,我们发现自己做了很多事情,而UserControl却经常减少我们的使用。 我还将遵循沿PART_TextDisplay之类的名称命名诸如文本框之类的东西的传统,以便将来您可以将其模板化,而将代码隐藏在后面。


您可以在UserControl的构造函数中将DataContext设置为此,然后仅按路径绑定。

CS:

1
DataContext = this;

XAML:

1
<TextBox Margin="8" Text="{Binding Text} />

推荐阅读

    显示linux时间命令?

    显示linux时间命令?,时间,系统,信息,一致,命令,文件,终端,目录,选项,参数,lin

    linux显示最多的命令?

    linux显示最多的命令?,系统,情况,信息,数据,工具,电脑,状态,时间,分析,命令,

    linux显示错误命令?

    linux显示错误命令?,信息,系统,电脑,状态,时间,环境,命令,搜狐,密码,异常,虚

    linux逐行显示命令?

    linux逐行显示命令?,标准,信息,系统,工作,地址,命令,实时,名称,文件,目录,Lin

    linux显示时间命令?

    linux显示时间命令?,时间,系统,管理,标准,信息,单位,工具,数据,中国,命令,lin

    linux启动显示命令行?

    linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

    linux启动显示命令行?

    linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

    linux显示之前的命令?

    linux显示之前的命令?,系统,信息,命令,地址,服务,环境,数据,标准,数字,不了,l

    linux打开显示器命令?

    linux打开显示器命令?,信息,工具,系统,环境,发行,实时,数据,设备,命令,文件,L

    linux命令实时显示?

    linux命令实时显示?,系统,实时,时间,信息,情况,命令,对比,电脑,名称,一致,lin

    linux外部命令显示?

    linux外部命令显示?,系统,工具,命令,一致,盘中,软件,技术,外部,内部,文件夹,L

    linux命令显示ip?

    linux命令显示ip?,地址,系统,网络,信息,技术,电脑,手机,设备,服务,管理,配置L

    linux编译时显示命令?

    linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

    linux显示运行命令?

    linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

    linux使用命令的方法?

    linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,

    显示linux网卡命令行?

    显示linux网卡命令行?,系统,信息,工具,网络,服务,电脑,网卡,技术指标,地址,

    linux命令显示内容?

    linux命令显示内容?,标准,系统,数据,命令,百度,实时,时间,信息,文件,内容,lin

    linux常用显示命令?

    linux常用显示命令?,工作,地址,系统,信息,管理,命令,目录,标准,功能,常用命

    linux用命令显示账号?

    linux用命令显示账号?,密码,系统,信息,地址,电脑,名字,用户,命令,用户名,用

    linux命令行同步显示?

    linux命令行同步显示?,地址,工具,系统,数据,工作,时间,命令,综合,网址,信息,L