对没有默认构造函数的控件使用 XamlReader

2023-12-10

我有一些 Xaml 对象的字符串表示形式,并且我想构建控件。我正在使用XamlReader.Parse函数来执行此操作。对于像 Button 这样的简单控件,它有一个不带任何参数的默认构造函数,这样可以很好地工作:

var buttonStr = "<Button xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">Text</Button>";
var button = (Button)XamlReader.Parse(buttonStr); 

然而,当我尝试这样做时,例如a 行程控制失败。首先尝试一个简单的空描边:

var strokeStr = "<Stroke xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"></Stroke>";
var stroke = (Stroke)XamlReader.Parse(strokeStr);

这给出了错误:

无法创建“System.Windows.Ink.Stroke”类型的对象。 CreateInstance 失败,这可能是由于没有“System.Windows.Ink.Stroke”的公共默认构造函数造成的。

在 Stroke 的定义中,我发现它至少需要构造一个 StylusPointsCollection。我认为这就是错误告诉我的内容,尽管有点假设这将由 XamlReader 处理。尝试使用 StylusPoints 转换 Stroke 的 Xaml 会产生相同的错误:

var strokeStr = 
    "<Stroke xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">" + 
        "<Stroke.StylusPoints>" + 
            "<StylusPoint X=\"100\" Y=\"100\" />" +
            "<StylusPoint X=\"200\" Y=\"200\" />" + 
        "</Stroke.StylusPoints>" + 
    "</Stroke>";
var stroke = (Stroke) XamlReader.Parse(strokeStr);

我究竟做错了什么?如何告诉 XamlReader 如何正确创建 Stroke?


它是 XAML 语言的一个“功能”,它是声明性的,并且不了解有关构造函数的任何信息。

人们使用对象数据提供者在 XAML 中“翻译”并包装没有无参数构造函数的类的实例(它是对于数据绑定也很有用).

在您的情况下,XAML 应该大致如下所示:

<ObjectDataProvider ObjectType="Stroke">
    <ObjectDataProvider.ConstructorParameters>
        <StylusPointsCollection>
            <StylusPoint X="100" Y="100"/>
            <StylusPoint X="200" Y="200"/>
        </StylusPointsCollection>
    </ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>

代码应该是:

var stroke = (Stroke) ((ObjectDataProvider)XamlReader.Parse(xamlStr)).Data;

HTH.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对没有默认构造函数的控件使用 XamlReader 的相关文章

随机推荐

  • 将 C++ 函数对象作为线程例程传递给 pthread_create 函数

    我知道传递给 pthread create API 的线程例程具有以下原型 void threadproc void 我只是想知道是否可以使用 C 函数对象作为线程例程 这是我的代码 执行 运行方法需要一个time t变量和一个functo
  • VBA 在特定时间段内从用户创建的文件夹中删除 Outlook 邮件

    我正在寻找一个 VBA 代码片段来删除六 6 个月或更早且位于用户创建的文件夹中的 Outlook 邮件 该代码是什么样的 这是一个示例脚本 Sub DeleteOlderThan6months Dim oFolder As Folder
  • 通过反射传递引用嵌套结构

    type Client struct Id int Age int PrimaryContact Contact Name string type Contact struct Id int ClientId int IsPrimary b
  • 在 Razor 中生成动态 XML

    我在 ASP NET 之外使用 Razor 从模板生成 XML 文档 我有以下代码
  • 使用 iText7 从 PDF 中提取文本。如何提高其性能?

    目前 我使用此代码从矩形 区域 中提取文本 public static class ReaderExtensions public static string ExtractText this PdfPage page Rectangle
  • 如何在 Grails 2.0 中从 war 文件中排除资源?

    我的 Grails 2 应用程序中有一些测试数据 其中包含一些特殊内容 图像 视频等 在构建战争时不应包含这些内容 在开发时 这些文件存储在web app content 那么问题来了 在生产环境构建战争时如何排除它们呢 在我的搜索过程中我
  • 从上下文菜单复制文件的父目录路径

    我正在学习批处理脚本 因为它对于设置 Windows 用户选择的一些快速自定义上下文菜单选项来获取文件及其父目录的路径非常有用 现在我知道以下命令将传递的参数作为文件路径并将其复制到剪贴板 cmd c echo set p 1 clip 但
  • Extjs网格面板一列背景颜色更改另一列值

    我有一个 Extjs 编辑器网格面板 在其中我必须根据另一列值的值更改一列的 css 那么如何做到这一点我无法使用渲染器功能 因为它在 onload 上工作还有其他方式我附加代码吗其中我有性别列和 ID 列 因此当性别列选择男性时 ID 的
  • 更改不同分辨率下的 flexbox-direction

    为什么在低于 800px 的分辨率下 flex direction 不会改变 这些项目仍然在一排 如果我想更改不同分辨率的顺序 也会发生同样的情况 这是 HTML 和 CSS body font weight bold text align
  • LDAPS 未与 PHP 连接

    我在使用 Windows 连接到安全 LDAP 服务器时遇到问题 而且我在网上到处都看到同样的情况 但到目前为止还没有有效的解决方案 我尝试过同时使用 IIS 和 WAMPSERVER 我已将 libeay32 dll 和 ssleay32
  • 在 Node.js 中等待多个回调的惯用方法

    假设您需要执行一些依赖于某些临时文件的操作 自从 我们这里讨论的是 Node 这些操作显然是异步的 等待所有操作完成的惯用方法是什么 知道什么时候可以删除临时文件吗 这是一些显示我想要做什么的代码 do something tmp file
  • 在活动之间传递自定义对象

    我尝试过在这里和许多其他网站找到的许多不同的解决方案 但我就是无法使其工作 我在一项活动中有一个对象 公寓 该对象将在另一项活动中使用 该活动从类 MyMapOverlayItem 启动 并应启动应在其中使用 Apartment 对象的 A
  • 如何使安装在不同aws实例上的docker中的Hazelcast节点相互交互?

    我有三台 aws 机器 在上面设置了三个 docker 容器 并在其上安装了 hazelcast 3 5 4 ubuntu 将 aws 配置设置为我通常使用 Hazelcast 执行的操作 没有 docker 节点不会相互发现 如何让他们互
  • 在 ASP.NET RegularExpressionValidator 中使正则表达式不区分大小写

    给定这个正则表达式 0 9 s lbs kg kgs 我如何使其不区分大小写 我试图在 net 正则表达式验证器中使用它 因此我需要在模式中指定不区分大小写 我无法以编程方式使用 RegexOptions 因为我在 RegularExpre
  • 检查矩阵中的列或对角线是否 = x(不使用 Numpy)

    我可以使用此代码来检查矩阵中的一行是否 x q 1 2 1 1 2 1 2 1 2 answer sum row for row in q for i in range 0 len q if answer i 6 print Player
  • rbenv 安装的 ruby​​ 2.1.2 无法在 MAC OSX 10.9.2 上加载此类文件 -- zlib

    我通过 rbenv 安装 ruby 2 1 2 rbenv 是通过 homebrew 在我的 MAC OSX 10 9 2 上安装的 ruby global 成功设置为 2 1 2 但是当我尝试运行 gem install 时 出现以下错误
  • 如何使三根柱子高度相同?

    我已经查看了这个问题的十几个问题和答案 但似乎没有一个适合我的情况的最佳答案 我有一个页面 http awesomealbums info 1062 chris cornell 具有三个垂直列 我希望各列看起来具有相同的高度 无论其中是否有
  • 使用 pandas 对数据框进行排序。保持柱子完好无损

    如下图所示 我想按以下方式对聊天进行排序Type按字母顺序排列 不过 我不想打乱顺序 Date User id 每个内Chat name 鉴于我的输入数据框位于左侧 我应该如何执行此操作 在Python中使用Pandas 您想使用对值进行排
  • AVPlayerLayer 显示黑屏但声音正常

    我正在尝试在中显示本地录制的视频AVP播放器层哪个有效有时 我可以听到录制视频中的音频 但看不到视频 有时视频和音频都可以工作 有时只有音频 我都尝试过AVP播放器层 and AVPlayerViewController但这两种情况都会出现
  • 对没有默认构造函数的控件使用 XamlReader

    我有一些 Xaml 对象的字符串表示形式 并且我想构建控件 我正在使用XamlReader Parse函数来执行此操作 对于像 Button 这样的简单控件 它有一个不带任何参数的默认构造函数 这样可以很好地工作 var buttonStr