问题标签 [xamlreader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4814 浏览

wpf - 使用 XamlReader 从字符串创建网格

我有一个 XAML 网格的字符串表示形式,如下所示:

我需要做的是用这个字符串创建一个 Grid 对象。我尝试了很多方法,但到目前为止最接近的是下面的代码:

但是,发生 XamlParsedException 表示缺少根元素。

我在 XAML 代码中是否有我看不到的错误?还是方法不好?

感谢您的回答

0 投票
1 回答
733 浏览

wpf - 如何让松散的 Xaml 内容了解自定义控件

我有一个松散的 XAML 文件...

...我想在运行时加载。当我这样做时,我得到一个异常说明,“类型引用找不到名为 'CustomControl' 的公共类型。” 如何让松散的 XAML 了解我的命名空间?

我需要使用HoverOpacitywhich 是CustomControl. 这是我目前用来加载 XAML 的代码:

顺便说一句,我意识到 XAML 很简单,我可以只插入Style代码,但这是一个 hello world XAML;它会变得更加复杂,涉及动画等。

PS 另一种解决方案是将 XAML 文件附加到从 Panel 派生的自定义控件(不会使 Visual Studio 2008 崩溃的控件)或轻松附加触发器、数据触发器、进入操作和退出操作的方法到自定义控件。

0 投票
1 回答
4742 浏览

c# - C# Attribute XmlIgnore 和 XamlWriter 类 - XmlIgnore 不起作用

我有一个类,包含一个Brush MyBrush标记为[XmlIgnore]. 然而,它在流中被序列化,在尝试通过读取时造成麻烦XamlReader

我做了一些测试,例如当改变属性的可见性(到内部)时,它在流中消失了。不幸的是,在我的特定情况下,我无法做到这一点。

  1. 有没有人有同样的问题?
  2. 你有什么办法解决这个问题吗?

备注:据我所知,C# 4.0

这是我的单元测试中的一种方法,我在其中测试XamlSerialization

在我的一门课程中,我使用了 Property Brush。在上面的代码中,这个单元测试失败了,因为Brush值是一个对象(不可序列化)。当我删除 Setter(如下所示)时,单元测试通过。

使用XmlWriter(与上述基本相同的测试)它可以工作。在StringBuffer sb我可以看到,Property Brush当 Setter 存在而不是被移除时,它是序列化的(很可能是另一个检查忽略了属性,因为没有设置器)。其他属性[XmlIgnore]按预期忽略。

0 投票
0 回答
1029 浏览

c#-4.0 - XamlWriter 的 C# 对象 Xaml 工厂方法

我的班级使用图像作为属性 ( public Image myImage)。当这个类被序列化(XamlWriter)它工作正常,读回它会给出一个异常:

'在类型'System.Drawing.Bitmap'上找不到匹配的构造函数。您可以使用 Arguments 或 FactoryMethod 指令来构造此类型。行号“5”和行位置“8”。

显然,以 ColorPalette 作为参数的 Bitmap 缺少一个构造函数:

我知道我可以指定一个以某种方式创建位图的工厂方法。我还发现了一些关于指令的文章,例如http://www.wpftutorial.net/XAML2009.html

但是,我不是专家,Xaml也不了解如何以及在何处定义/声明我的属性的方法。不幸的是,我也没有找到一个例子。

我期待一些喜欢

但实际上一无所获。你知道任何想法/例子吗?

0 投票
2 回答
704 浏览

wpf - 如何防止 XamlReader.Load(xamlFile) 插入额外的 Run 元素?

想象一下,我有一个这样的 FlowDocument:

我像这样加载它:

这是什么结果:

在此处输入图像描述

虽然我想看到的是这样的:

在此处输入图像描述

但是在查看监视窗口中的 FlowDocument 时,我看到它在它们之间插入了 Runs,它们的内容本质上是一个空格,因此我在段落中没有我期望的 3 个内联,而是有 5 个。

如何避免插入那些空白运行?

注意:我不能真正将这三个运行分组为一个,这将是一个简单的答案,因为它们需要保持单独的对象。

想法?


解决方案:正如 Aaron 在下面正确回答的那样,将 Runs all 分组在一行上可以解决此问题。顺便说一句,该文档是根据其他数据动态构建的(比我的示例更复杂),并使用 XmlWriterSettings 属性 Indent 设置为 true 的 XmlWriter 写出(因为更容易看到输出而不是全部一起运行)- 将其设置为 false 会在 XamlReader 读入时消除那些额外的运行。

0 投票
4 回答
306 浏览

wpf - 使用 VVBig XAML 文件

您是否曾经尝试过使用包含数千吨代码行的 XAML 文件。(更具体地说,在我的情况下为整个应用程序绘制画笔)。此文件大小为 20+ MB。每当我尝试在其中添加/编辑任何内容时,Visual Studio 2008 都会崩溃(7/10 次)。然后,如果我能够进行更改并尝试保存更改,那么 VS 会崩溃(大多数情况下)。在 VS 中处理这么大的文件非常困难(在 Blend 中也发生了同样的情况,但很少发生)
我知道拥有这么大的文件并不符合良好的编码标准。但是,如果我们以某种方式遇到这种情况,我们该怎么办???

我最终发现的唯一东西是 KXAML :它被证明非常好。还有其他建议吗??

更新我不想更改该文件的结构或采用任何其他方法。我很想知道如何使用/处理这样的文件。(其他编辑可能是)

添加看到答案 - 我会说我现在没有卡住我想知道是否有人卡住了那么编辑这样的东西是更好的方法吗?(分离这个文件将是避免这个问题而不是解决方案的第一个想法)

ADD1好吧!!我的不好,我对这个想法太乐观了。考虑到画布,我会要求最好的做法来分割这个巨大的文件。

0 投票
5 回答
2598 浏览

c# - XamlReader.Load 在后台线程中。是否可以?

WPF 应用程序具有使用以下方法从单独的文件加载用户控件的操作XamlReader.Load()

由于文件的大小,该过程需要一些时间,因此 UI 会冻结几秒钟。

为了保持应用程序响应,我尝试使用后台线程来执行不直接参与 UI 更新的操作部分。

尝试使用时BackgroundWorker报错:调用线程必须是STA,因为很多UI组件都需要这个

所以,我走了另一条路:

这没有解决任何问题,因为所有耗时的操作都保留在 UI 线程中。

当我这样尝试时,在后台进行所有解析:

我遇到了一个异常:调用线程无法访问此对象,因为另一个线程拥有它。(在加载的 UserControl 中存在其他可能会出错的控件)

有什么方法可以使 UI 响应式地执行此操作?

0 投票
4 回答
1517 浏览

c# - 在 WPF 中加载 XAML 后访问 UIElement

Canvas使用以下文件从文件中加载 XAML 填充:

边框包含许多子元素,包括一些用户控件。

XAML 文件的部分片段:

当我想在代码隐藏中访问我的控件时,我实际上无法使用以下方法重新连接到元素:

UI 元素在屏幕上显示良好,但我总是收到“无法找到 Vis”消息。从我目前阅读的所有内容来看,只要我的元素是画布中某个地方的子元素,使用 FindName 就应该有效,对吧?我错过了什么?

谢谢

0 投票
1 回答
5187 浏览

wpf - XamlReader 能否加载包含在外部程序集中定义的类型的 xaml?

XamlReader使用本地程序集和 WPF 程序集中定义的类型加载 Xaml,没有任何问题。

如果我包含在外部程序集中定义的类型,则会引发带有以下消息的XamlParseException 。

无法创建未知类型“{clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Charting}SeriesMapping”。行号“13”和行位置“18”。

是否可以使用这种技术从外部程序集中加载类型?

0 投票
4 回答
7038 浏览

c# - 尝试设置 TextBox.IsReadOnly 时出现奇怪的 XAML 解析错误

我设法将其简化为一个简单的测试用例。在使用以下 XAML 解析期间引发异常XamlReader.Parse()

异常消息是:

无法设置未知成员“System.Windows.Controls.TextBox.IsReadOnly”。行号“13”和行位置“11”。

如果我没有设置IsReadOnlyTextBox它解析得很好。如果我删除样式触发器,它也可以很好地解析。

任何人都可以对此有所了解吗?我对 WPF 比较陌生。

更新:
这是我用来重现这个的单元测试(它在我的电脑上失败了):

更新 2:
我最初只是引用 PresentationFramework v4.0.30319。添加对 PresentationCore、System.Xaml 和 WindowsBase 的引用无效。

.NET 版本的项目是 4(完整,不是客户端配置文件)。

更新 3:
Arg,这在 ExpressionBlend 3.0.1927.0 和 XamlPadX 4 中运行良好。正如 AresAvatar 报告的那样,它似乎只在使用XamlReader.Parse()or解析时才会失败XamlReader.Load()