我已尽我所能地简化了代码,以尝试获得有效的代码,但仍然很短。一些建议将不胜感激。
我试图使DependencyProperty正常工作,就是这么简单,但是我在主窗口中设置的数据并未显示在用户控件中。
在MainWindow中,我将xaml中的TextValue设置为“ hi”。 TextValue在xaml中显示出来并可以很好地进行编译,因此我很确定自己对DependencyProperty的设置正确。对话框完全打开后,请查看调试器,我的属性TextValue仍为null。
我是否缺少设置数据上下文?也许我在做自己想做的事时没有根据。
感谢您抽出宝贵的时间弄清楚我在做什么错。
我的用户控件是:UserControl1 Xaml:
<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Loaded="UserControl_Loaded"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
</Grid>
</UserControl>
UserControl1.xaml.cs是:
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for UserControl1.xaml
/// </summary>
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("TextValue", typeof(string), typeof(UserControl1));
private string _tv;
public string TextValue
{
get
{
return _tv;
}
set
{
_tv = value;
}
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
}
}
}
我的呼叫窗口xaml是:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:usercontrols="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525"
Loaded='Window_Loaded'>
<Grid>
<usercontrols:UserControl1 x:Name="usercontroltest1" TextValue="hi"/>
</Grid>
</Window>
我的呼叫窗口.cs是:
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
}
}
}
答案 0 :(得分:0)
“属性包装器”的获取器和设置器必须调用DependencyObject基类的GetValue和SetValue方法,如下所示。除此之外,还有一个命名约定,该约定要求将依赖项属性的标识符字段命名为该属性,再加上一个Property
后缀。有关所有详细信息,请参见Custom Dependency Properties。
public static readonly DependencyProperty TextValueProperty =
DependencyProperty.Register(
nameof(TextValue), typeof(string), typeof(UserControl1));
public string TextValue
{
get { return (string)GetValue(TextValueProperty); }
set { SetValue(TextValueProperty, value); }
}
为了在自己的XAML中访问UserControl的依赖项属性,通常应使用如下所示的RelativeSource绑定:
<UserControl x:Class="WpfApplication1.UserControl1" ...>
<Grid>
<TextBlock Text="{Binding TextValue,
RelativeSource={RelativeSource AncstorType=UserControl}}" />
</Grid>
</UserControl>