繁体   English   中英

为什么我的 wpf 表单绑定到内部资源?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM