我正在尝试创建一个简单的依赖属性代理。我做了一个自定义控件,它是一个文件选择器,它由一个文本框(名称:)"TextBox_FilePath"
和一个显示打开文件对话框的按钮组成。
当我正在制作一个可重用的控件时,我希望它有一个"SelectedFilePath"
属性。由于该Text
属性似乎非常适合我的控件成为该"SelectedFilePath"
属性,因此我只想代理这些依赖项属性。
我提出的第一种方法是:
public static readonly DependencyProperty SelectedFilePathProperty = TextBox.TextProperty;
public string SelectedFilePath
{
get { return (string) this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
这有效,但在尝试绑定到该属性时抛出了异常。然后我离开了:
public static readonly DependencyProperty SelectedFilePathProperty =
DependencyProperty.Register("SelectedFilePath", typeof (string), typeof (FilePicker), new PropertyMetadata(default(string)));
public string SelectedFilePath
{
get { return (string) this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
这确实有效,但我不知道为什么?我在哪里指定我想要text
文本框的属性?
我缺少什么来简单地代理该依赖属性?
编辑:
解决方案AddOwner
也不起作用,它会抛出一个 Excetion 说“绑定只能应用于依赖属性”。代码:
public static readonly DependencyProperty SelectedFilePathProperty =
TextBox.TextProperty.AddOwner(typeof(FilePicker));
public string SelectedFilePath
{
get { return (string)this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
我不明白什么?
EDIT2: 对于其他在理解答案方面有问题的人,我制作了一个小图形