问题标签 [xamlwriter]

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 回答
1198 浏览

.net - 如何防止 XamlWriter.Save 序列化 BaseUri 属性?

我正在为 WPF 应用程序制作主题编辑器。我动态生成 XAML 文件,然后将它们编译成应用程序使用的 DLL。用于生成 XAML 文件的代码遵循以下几行:

我的问题是这XamlWriter.Save也序列化​​了BaseUri属性:

结果是,当应用程序尝试获取此图像时,它没有找到它,因为BaseUri未设置。通常,XAML 解析器设置此属性(通过IUriContext接口),但当它已在 XAML 中显式设置时,解析器不会设置它,因此它保持为空。

有没有办法防止XamlWriter序列化BaseUri属性?

如果我正在序列化一个自定义类,我可以添加一个ShouldSerializeBaseUri()方法,或者IUriContext显式实现(我尝试了这两个选项并且它们给出了所需的结果),但是如何做到这一点BitmapImage呢?

作为最后的手段,我可​​以加载 XAML 文件并使用 Linq to XML 删除属性,但我希望有一个更干净的解决方案。

0 投票
0 回答
248 浏览

wpf - WPF:XamlWriter.Save 以不同方式保存“运行”内联 - 带有标签和不带标签(作为简单文本)

文本块有 3 个运行内联。我需要将它保存到 xml,并为此使用 XamlWriter.Save,结果我得到了这个:

问题是,这个 xaml 被解析为纯 xml,而不使用 wpf 框架。为了使解析器正常工作,我必须确保 xaml 呈现如下:

例如,每个内联都是一个单独的标签。我怎样才能做到这一点?我查看了 XamlWriter 和 Inlines 集合的属性和设置,但找不到与之对应的任何内容。

0 投票
2 回答
1484 浏览

c# - TFS 2010:为什么不能反序列化字典当我可以使用 XamlReader 进行反序列化时,使用 XamlWriter.Save

上面的语句返回一个NotSupportedException.

奇怪的是我可以使用XamlReader来序列化字典。

XML:

0 投票
2 回答
1804 浏览

c# - 在 BackgroundWorker 线程上创建 FlowDocument

FlowDocument我需要从大量数据中动态生成一个。因为这个过程需要几分钟,我想在后台线程上执行操作而不是让 UI 挂起。

但是,我无法FlowDocument在非 UI 线程上生成,否则尝试插入矩形和图像会导致运行时错误,抱怨它不是 STA 线程。

StackOverflow 上有几个线程似乎涉及我遇到的相同问题:

在第一个链接中,有人提出以下建议:

“我会做什么:使用 aXamlWriter并将其序列FlowDocument化为XDocument. 序列化任务涉及Dispatcher,但是一旦完成,您可以根据需要对数据运行任意数量的古怪并行分析,并且 UI 中的任何内容都不会影响它。(同样,一旦它是一个XDocument你查询它XPath,这是一个非常好的锤子,只要你的问题实际上是钉子。)”

有人可以详细说明作者的意思吗?

0 投票
1 回答
2232 浏览

wpf - WPF 中的简单 XAML 查看器

我需要将 WPF 控件的 XAML 写入字符串。我使用了 XamlWriter.Save()。它运作良好。我还需要在 VS Xaml 代码视图等编辑器(只读)中格式化、缩进和显示字符串。我不知道该怎么做。

请分享您的宝贵意见。

0 投票
2 回答
1873 浏览

c# - 使用 XamlWriter 保存数组

我正在尝试以XamlWriter最简单的方式保存一组对象。出于某种原因,将它们保存为数组会产生无效的 XML:

输出:

尝试使用XamlReaderthrows 阅读此内容:

'[' 字符,十六进制值 0x5B,不能包含在名称中。第 1 行,第 7 位

我尝试另存为,List<T>但我得到了通常的 XAML 泛型错误。有什么简单的方法可以做到(最好使用 LINQ)还是必须定义自己的包装器类型?

0 投票
1 回答
535 浏览

windows-runtime - 在 WinRT 中克隆 Xaml FramworkElement

我需要FrameworkELement在 WinRT 中的 CodeBehind 中克隆一个 ...

我确实在互联网上找到了一个解决方案,尽管这种解决方法在 WinRT 中不起作用,因为它XamlWriter在 winRT 中不可用!是否有一种简单/内置的方法来获取 XAML 元素的精确副本(克隆)?

还有其他方法可以获取 my 的另一个实例FrameworkElement吗?

0 投票
1 回答
336 浏览

c# - 从 XamlWriter.Save(object obj, Stream stream) 中获取字符串

我可以从 中取回一个字符串XamlWriter.Save(myBF, stream)吗?我需要它,所以将字符串保存在我的数据库中。我必须从这个答案的例子中改变什么

0 投票
2 回答
2404 浏览

c# - 使用 XamlReader 和 XamlWriter 时将内容从一个 FlowDocument 插入另一个

我将 FlowDocument 与 BlockUIContainer 和 InlineUIContainer 元素一起使用,这些元素包含(或作为基类)一些自定义块 - SVG、数学公式等。因此,使用 Selection.Load(stream, DataFormats.XamlPackage) 将不起作用,因为序列化将删除 * UIContainers,除非 Child 属性是 Microsoft 参考源中可用的图像:

在这种情况下,唯一的选择是使用完美工作的 XamlWriter.Save 和 XamlReader.Load,序列化和反序列化 FlowDocument 的所有必需属性和对象,但必须手动实现 Copy+Paste 作为 Copy+ 的默认实现粘贴使用 Selection.Load/Save。

复制/粘贴非常重要,因为它还用于处理在 RichTextBox 控件中或之间拖动元素 - 这是无需自定义拖动代码即可操作对象的唯一方法。

这就是为什么我希望使用 FlowDocument 序列化来实现复制/粘贴,但不幸的是它存在一些问题:

  1. 在当前解决方案中,需要对整个 FlowDocument 对象进行序列化/反序列化。就性能而言,这应该不是问题,但我需要存储需要从中粘贴哪些选择范围的信息(CustomRichTextBoxTag 类)。
  2. 显然,对象不能从一个文档中删除并添加到另一个文档(我最近发现的一个死胡同):“InlineCollection”元素不能插入到树中,因为它已经是树的子节点。

    我考虑在所有需要移动到另一个文档的元素中使用反射来设置 FrameworkContentElement._parent,但这是最后的手段 hackish 和肮脏的解决方案:

  3. 从理论上讲,我只能复制所需的对象:(可选)在选择开始时使用文本部分运行,中间的所有段落和内联以及(可能)在最后部分运行,将这些封装在自定义类中并使用序列化/反序列化XamlReader/XamlWriter。

  4. 另一个我没有想到的解决方案。

这是自定义的 RichTextBox 控件实现,其中包含部分工作的自定义复制/粘贴代码:

还有一个问题 - 是否存在使用 XamlReader 和 XamlWriter 为 FlowDocument 自定义复制+粘贴代码的现有解决方案?如何修复上面的代码,使其不会抱怨不同的 FlowDocument 对象或解决此限制?

编辑:作为一个实验,我实现了 2),以便可以将对象从一个 FlowDocument 移动到另一个。上面的代码已更新 - 所有对“字段”变量的引用。

0 投票
2 回答
1823 浏览

c# - XamlWriter.Save() 未序列化 DependencyProperties

考虑我的 UserControl 中的以下 XAML:

以及相关的事件处理程序:

加载 TextBlock 时,会将以下输出写入控制台:

现在考虑这个替代 XAML:

现在,当加载 TextBlock 时,以下输出将写入控制台:

请注意,TextProperty 不再被序列化。

如果在调用 XamlWriter.Save() 之前添加了以下 TextProperty 分配:

然后在加载 TextBlock 时,将以下输出写入控制台:

请注意,TextProperty 再次被序列化。

这篇博客文章解释说“......如果属性由 DependencyProperty 支持......只有在实际设置时才写入该属性。”

似乎在第一个用法示例中确实设置了 TextProperty,但在 ListBox 和 DataTemplate 的第二个用法示例中没有设置。

谁能解释为什么会这样,以及如何克服这个障碍?

我最好的猜测是 XAML 解析器以某种方式在内部设置 TextBlock 状态,而不是在依赖属性上调用 SetValue,但我不确定它为什么只对 DataTemplate 中的元素执行此操作。