C# 在UI线程外读取附加属性的内容

C# 在UI线程外读取附加属性的内容,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,上下文 我有一个复杂的WPF应用程序,我正在构建一个工具系统,旨在清理XAML文件,并确保它们尊重样式和本地化的业务规则。为此,我正在加载适当的依赖项 Assembly.LoadFrom(Path.Combine(assemblieLocation, "SomeAssembly" + ".dll")); 加载后,我通过反射创建适当的实例 (UIElement)Activator.CreateInstance(typeToInstantiate, true); 问题 我面临的问题是,我必须能够

上下文

我有一个复杂的WPF应用程序,我正在构建一个工具系统,旨在清理XAML文件,并确保它们尊重样式和本地化的业务规则。为此,我正在加载适当的依赖项

Assembly.LoadFrom(Path.Combine(assemblieLocation, "SomeAssembly" + ".dll"));
加载后,我通过反射创建适当的实例

(UIElement)Activator.CreateInstance(typeToInstantiate, true);
问题

我面临的问题是,我必须能够从一个网站上阅读内容。在我现在所处的上下文中,WPF应用程序使用TextBlock的Text属性或内部定义的自定义依赖项属性。知道依赖项属性必须定义Get/Set对才能访问属性的内容,并确保CLR能够确保自定义属性与直接来自.NET或lib的属性之间存在差异,这就是我所采用的方法

if(uiElemetInstance is TextBlock tBlock && !string.IsNullOrEmpty(CustomClass.GetText(tBlock))
我在这里遇到的问题是在运行时,即使在XAML文件中,文本是用一个值定义的,但我的系统可以毫无问题地实例化TextBlock,但无法看到Text属性的内容;它仍然是一个空字符串,我不明白为什么会这样

可重复的步骤

必需元素

  • 1个控制台应用程序
  • 1 WPF应用程序
  • 1个XAML文件
  • 定义一个自定义类,该类将定义attach属性(在WPF项目中定义)
  • 在控制台应用程序中使用反射加载WPF项目
  • 从控制台应用程序读取附加属性内容

  • 这里有一个指向my的链接,其中包含本期的所有要求。

    为什么不这样做<代码>!string.IsNullOrEmpty(tBlock.Text)
    tBlock.Text
    将为您获取
    Text
    属性的当前值(如果您需要的话)。我没有提到,即使UI元素的Text属性在XAML文件@mm8中定义得很好,但它仍然是空字符串(我将更新我的问题,以便其他人知道),它返回一个空字符串,这意味着它没有被设置为任何其他值。@mm8在我当前分析的XAML文件中,在TextBlock的定义中,Text属性是通过内部定义的类定义的。如果您希望有人能够帮助您,您应该包括问题的可复制样本: