代码之家  ›  专栏  ›  技术社区  ›  Kevin Avignon

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

  •  0
  • Kevin Avignon  · 技术社区  · 6 年前

    上下文

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

    Assembly.LoadFrom(Path.Combine(assemblieLocation, "SomeAssembly" + ".dll"));
    

    加载后,我通过反射创建适当的实例

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

    问题

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

    if(uiElemetInstance is TextBlock tBlock && !string.IsNullOrEmpty(CustomClass.GetText(tBlock))
    

    我在这里遇到的问题是在运行时,即使在XAML文件中,文本是用一个值定义的,我的系统可以毫无问题地实例化TextBlock,但看不到文本属性的内容;它仍然是一个空字符串,我不明白为什么会这样。

    可重复的步骤

    必需元素

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

    这里有一个链接到我的 gist 包含此问题的所有要求。

    0 回复  |  直到 6 年前