我正在尝试创建一个简单的依赖属性代理。我制作了一个自定义控件,它是一个文件选择器,由文本框(名称:
由于我正在制作可重用控件,我希望它具有
我采取的第一种方法是:
我不明白什么?
编辑2: 对于其他有理解困难的人,我制作了一张小图。
"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
的解决方案也不起作用,它会抛出一个异常,说“绑定只能应用于依赖属性”。 代码:
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); }
}
我不明白什么?
编辑2: 对于其他有理解困难的人,我制作了一张小图。
Text
的属性,您创建的SelectedFilePath
属性仅是在您的命令式代码中方便使用的包装器,绑定从未使用它。如果您想要不同的名称,请注册自己的属性。 - H.B.TextBox.Text
,它并没有什么特殊的作用,可以使用自己的属性。 - H.B.AddOwner
应该放在哪里呢? - GameScriptingTextBox.Text
)绑定到我的属性上,这样一切都保持同步? - GameScriptingTemplateBinding
将其绑定到ControlTemplate
中的TextBox
上。 - H.B.