【发布时间】:2019-05-26 17:01:04
【问题描述】:
快速概览
我创建了一个自定义控件“InputValuePage”。 我已经用这个名为 InputTitle 的控件注册了一个依赖属性。 在用户控件 InputTitle 中绑定到文本块效果很好,但是当我将此自定义控件用作框架或窗口中的子控件时,我无法使用绑定来设置我的依赖项属性。下面是用于 InputTitle 属性的代码。
自定义控件类代码后面:
public partial class InputValuePage : Page
{
public static readonly DependencyProperty InputTitleProperty =
DependencyProperty.Register("InputTitle", typeof(string), typeof(InputValuePage));
public string InputTitle
{
get { return (string)GetValue(InputTitleProperty); }
set { SetValue(InputTitleProperty, value); }
}
public InputValuePage()
{
InitializeComponent();
}
}
示例用法:
<Frame Grid.Row="2"
Grid.ColumnSpan="2"
Grid.RowSpan="2"
x:Name="DisFrame">
<Frame.Content>
<local:InputValuePage
InputMessage="This gets set in the control."
InputTitle="{Binding ElementName=DisFrame, Path=Name}"
HostWindow="{Binding ElementName=DemoWindow}">
</local:InputValuePage>
</Frame.Content>
</Frame>
为了澄清在 XAML 中设置的三个值都是依赖属性。输入消息和标题可以在提供字符串时成功设置,但数据绑定从未实际设置值。我缺少什么来允许绑定数据?
【问题讨论】:
-
DisFrame 的 Name 属性是否设置在任何地方?什么是演示窗口?请注意,元素名称在 XAML 文件中无效。
-
在上面的示例用法块中设置了名称“DisFrame”。 DemoWindow 是分配给包含所有控件的父窗口的名称,包括示例用法中显示的框架。我可以毫无问题地对按钮的内容或文本块的文本进行相同的绑定,但是它不适用于自定义控件
-
指定 x:Name 设置名称属性。如果我用一个按钮替换自定义控件,并为按钮的内容属性指定与上面显示的 InputTitle 完全相同的绑定,那么一切都会按预期工作
标签: c# wpf custom-controls dependency-properties