如何从 WPF 中的共享(静态)DependencyPropertyChangedCallback 使用用户控件内的控件?

How to work with controls inside a user control from a shared (static) DependencyPropertyChangedCallback in WPF?

我是 WPF 的初学者。我自己完成了一些教程,现在我想尝试我的第一个项目,但一开始就卡住了。

我尝试创建一个带有可绑定 属性 Items.

的用户控件

用户控件的 XAML 只包含一个简单的 TextBox,没有别的。

<UserControl x:Class="UserControl1" xmlns:local="clr-namespace:TestControl" ...>
    <TextBox x:Name="txtContent" />
</UserControl>

在用户控件的隐藏代码中,我创建了一个名为 ItemsDependencyProperty

Public Shared ReadOnly ItemsProperty As DependencyProperty = DependencyProperty.Register("Items", GetType(IList(Of String)), GetType(MyUserControl), New FrameworkPropertyMetadata(Nothing, AddressOf MyUserControl.OnItemsChanged))

Public Property Items As IList(Of String)
    Get
        Return MyBase.GetValue(MyUserControl.ItemsProperty)
    End Get
    Set(ByVal value As IList(Of String))
        MyBase.SetValue(MyUserControl.ItemsProperty, value)
    End Set
End Property

Private Shared Sub OnItemsChanged(sender As DependencyObject, e As DependencyPropertyChangedEventArgs)
    ...
End Sub

OnItemsChanged 过程中,我想将项目集合的内容添加到用户控件的 TextBox 中。但是由于 DependencyProperty 是 Shared(对于 C# 用户是 static)并且用户控件本身不是 我不知道如何在我的用户控件和工作中掌握 TextBox有了它。

我试图在.NET 属性 的setter 中调用一个非共享过程,但是这个.NET 属性 似乎只是表面功夫,没有任何用处。

我也试过将sender转换成UserControl,得到用户控件的Content(应该是我的TextBox)。但是 Content 始终是 Nothingnull 对于 C# 用户)。

那么,我如何通过静态 DependencyPropertyChangedCallback 使用我的用户控件中的控件?

在将我的测试项目精简到最基本的部分之后,我之前尝试过的所有事情都没有成功(将发件人转换为 UserControl 并获得它 Content 或将发件人转换为特定的控件类型并获得TextBox 它的名字)突然起作用了。 然后我又一步一步的剥离,直到找到步骤,然后问题就消失了。

问题是,我创建了一个名为 "TestControl.xaml" 的 UserControl 文件,但此文件中的 UserControl 标记仍然具有属性 x:class="UserControl1"。 我可以在 MainWindow 中使用这个控件及其专有名称 (TestControl),我可以编译我的项目并且可以调试我的项目,但显然这阻止了在后面的代码中使用用户控件。 因此,将属性 x:class="UserControl1" 重命名为 x:class="TestControl" 就成功了。