[英]Why does my wpf form bind to internal resource?
我有一个 wpf 控件和一个资源(标记为内部)——两者都在同一个命名空间中。
但是当我尝试通过
<Window x:Class="WpfApp7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp7"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBlock Text="{x:Static local:Resource1.String1}" />
</Grid>
</Window>
我收到运行时 XamlParseException。 一旦我公开资源,一切正常。
我是否被迫公开资源以从 xaml 访问它? 在后台 C# 代码中,一切正常。
编辑:内部 ArgumentException 异常表明,静态值“WpfApp7.Resource1.String1”无法解析为枚举、静态文件或属性。
您必须了解, {x:static}
是一个标记扩展,它仅用于在运行时通过放置在另一个程序集中的 XAML 服务解析Member
属性。 请参阅 MSDN 上的x:Static Markup Extension :
您可以对不在当前 XAML 文档的默认 XAML 命名空间中的静态字段或属性进行 x:Static 引用; 但是,这需要前缀映射。 XAML 命名空间几乎总是在 XAML 文档的根元素上定义。
当 .NET XAML 服务及其 XAML 读取器和 XAML 写入器使用默认 XAML 架构上下文运行时,它们可以执行静态属性的查找操作。
所以
<TextBlock Text="{x:Static local:Resource1.String1}" />
是相同的:
<TextBlock Text="{x:Static Member=local:Resource1.String1}" />
由于无法解析内部属性,因此有关必须抛出Member
内容的默认错误消息:
引用的代码实体必须是以下之一:
- 一个常数
- 静态属性
- 一个字段
- 枚举值
如果 XAML 是标记编译的,则指定任何其他代码实体(例如非静态属性)会导致编译时错误或 XAML 加载时分析异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.