【发布时间】:2015-03-21 00:38:05
【问题描述】:
在使用具有 DependencyProperties 的 UserControl 时,我意识到考虑在哪里设置 DataContext 是很重要的。为了描绘它,我创建了一个示例应用程序。有两个 UserControl,除了设置 DataContext 的位置之外,它们都是相等的:
工作用户控件:
<UserControl x:Class="DpropTest.OkUserControl"
...>
<Grid DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dpropTest:OkUserControl }}">
<TextBlock Text="{Binding Path=MyDepProp}"></TextBlock>
</Grid>
</UserControl>
用户控件不起作用:
<UserControl x:Class="DpropTest.NotOkUserControl"
...
DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dpropTest:NotOkUserControl}}"
>
<Grid >
<TextBlock Text="{Binding Path=MyDepProp}"></TextBlock>
</Grid>
两个 UserControl 都有一个名为 MyDepProp 的 DependencyProperty,
#region Dependency Property Declaration
public static readonly DependencyProperty MyDepPropProperty = DependencyProperty.Register(
"MyDepProp", typeof(string), typeof(NotOkUserControl), new PropertyMetadata(default(string)));
public string MyDepProp
{
get { return (string)GetValue(MyDepPropProperty); }
set { SetValue(MyDepPropProperty, value); }
}
#endregion Dependency Property Declaration
这就是我将用户控件集成到主窗口的方式:
<Grid x:Name="ParentGrid">
<StackPanel>
<dpropTest:OkUserControl MyDepProp="{Binding Path=ActualWidth, ElementName=ParentGrid}"/>
<dpropTest:NotOkUserControl MyDepProp="{Binding Path=ActualWidth, ElementName=ParentGrid}"/>
</StackPanel>
</Grid>
正在运行的应用程序仅显示第一个 UserControl 的 actualWith,第二个 UserControl 保持未设置,因为 DP 未绑定。
关于第二个 UserControl 的输出窗口中没有错误...
也许有一个 WPF Pro 有一个简短的解释? 谢谢! 乌力
【问题讨论】:
标签: wpf dependency-properties datacontext