Problem:
我正在尝试访问一个名为Run
a 内的元素FlowDocument
这是在窗口资源中定义的。为了澄清我的意思,请考虑以下代码:
<Window.Resources>
<FlowDocument x:Key="doc">
<Paragraph>
<Run x:Name="run" />
</Paragraph>
</FlowDocument>
</Window.Resources>
在这里,我会尝试访问Run
名为“run”的元素。
到目前为止我尝试过的:
只需使用元素的名称即可访问它。但是,窗口资源中的命名元素显然不具有与窗口内容中定义的元素相同的默认可访问性,因为此方法不起作用。
尝试添加密钥Run
元素,然后通过访问该元素FindResource()
方法。不幸的是,似乎无法将键添加到嵌套元素中。
-
下面的代码会抛出一个NullReferenceException
:
FlowDocument doc = (FlowDocument)FindResource("doc");
((Run)doc.FindName("run")).Text = "example text";
您可以使用LogicalTreeHelper.FindLogicalNode http://msdn.microsoft.com/en-us/library/system.windows.logicaltreehelper.findlogicalnode.aspx as
var doc = this.Resources["doc"] as FlowDocument;
((Run)LogicalTreeHelper.FindLogicalNode(doc, "run")).Text = "example text";
上面链接的备注:
- 搜索方向为查找逻辑节点朝向子对象(下树);的搜索方向FindName方法是
朝向父对象(上树).
- FindName 方法由 XAML 名称范围的概念控制。使用 FindName 可以保证只有一个对象
该名称存在,因为 XAML 名称范围强制唯一性。在
对比,FindLogicalNode 忽略 XAML 名称范围并且可能会跨越XAML
搜索期间的名称范围边界。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)