问题标签 [markup-extensions]

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 投票
3 回答
1459 浏览

wpf - .Net 4.5 中事件的标记扩展

WPF 没有定义用于事件的标记扩展,第三方能够创建可用于事件的标记扩展。现在 WPF 4.5 支持事件的标记扩展。任何人都可以通过一个优雅的例子帮助如何在.Net 4.5中实现这一点吗?

0 投票
2 回答
638 浏览

wpf - 如何使用基于 MarkUp Extensions 的文本自动替换 Xaml 文本

我们有一些翻译标记扩展,如下所示:

我们希望(因为我们可以使用其他一些工具进行 xaml 翻译)自动替换所有项目 xaml 中的文本标签。

有没有办法用正则表达式或 xml 读取器/写入器找出所有节点或属性来实现这种情况?

0 投票
1 回答
378 浏览

c# - 为什么 MarkupExtension 是 wpf 中的类

MarkupExtension 类的反编译如下所示:

如您所见,它可以作为接口实现,但它是一个类。WPF 团队为什么要这样设计它?而且,在 Silverlight 中,它是一个接口

0 投票
0 回答
173 浏览

wpf - 从 Extended WPF Toolkit 升级到 2.0 时标记扩展中断

这是我在将扩展 WPF 工具包的版本从 1.9.0 升级到 2.0.0 后遇到的一个问题,原因不相关。尽管花了一些时间来抨击它,但我仍然不确定问题出在它,我的代码,还是当时没有人想到的问题。

以前,我有一个 PropertyGrid 样式,它使用 EditorDefinition 的 TargetType 属性为几种不同的数据类型设置基于类型的自定义编辑器。这显然在 2.0.0 下不起作用,因为 EditorDefinition 已过时,因此,根据给出的警告消息,我使用 EditorTemplateDefinition 和 TargetProperties 重写了样式,因此:

https://gist.github.com/cerebrate/6695088

这就是问题所在。如果我注释掉上面的两个 EditorTemplateDefinitions,那些使用 {arkane:Nullable} 标记扩展的,样式的其余部分(使用 {x:Type} 标记扩展的两个定义)有效。如果我将它们留在其中,一旦显示包含属性网格的窗口,应用程序就会崩溃并出现 XamlParseException,无法将 System.RuntimeType 转换为 IList。

{arkane:Nullable} 是 TypeExtension 的一个简单但非常标准的扩展——或者至少是常见的——扩展,以提供在 XAML 中使用可为空类型的能力:

https://gist.github.com/cerebrate/6695095

但更重要的是,它是 TypeExtension 的一个简单子类,并且在应用于 EditorDefinition 中的 TargetType 时工作得很好,并且从那以后就没有改变过。

关于更改的哪一部分打破了这一点以及如何解决它的任何想法,在任一端?

或者,是否有任何方法可以将扩展 WPF 工具包 PropertyGrid 的自定义编辑器与可为空的类型相关联,而无需使用此类标记扩展?

0 投票
1 回答
793 浏览

c# - WPF MarkupExtension 和 RowDefinition 导致 NotImplementedException

场景: 创建一个 MarkupExtension 以将 Grid.Row=”0” 替换为 Grid.Row=”{namespace:ClassExtension GridRowName}”(列相同)

Xaml 代码:

要求:

  • 使用不正确的 GridRowName(或 columnName)时显示 XAML 错误
  • 使用正确的 GridRowName(或 columnName)时不显示 XAML 错误
  • 当 Valid ColumnName 用于 Row 声明(以及 vica verca)时,应显示 XAML 错误

问题: Grid.Column 一切正常,但 Grid.Row 总是在设计时抛出“未实现的异常”(grid.row 带下划线,grid.column 没有)。 在此处输入图像描述

行和列都命名正确,但行总是显示错误。如果我们指定了无效的列名,则该列会显示错误(这是预期的,因此 Grid.Column 可以正常工作!) 在此处输入图像描述

如您所见,列工作正常,但行不行。问题出在名为 GridDefinitionExtension 的 MarkupExtension 内部:

例外是在线上的:

在查看调用此方法的 DLL 之后,我发现此 ProvideValue 方法的主体如下所示:

我已经简化了这个 ProvideValue 方法,只显示它在我的场景中实际使用的代码:

显然,异常是由 GetFixUpToken 方法引发的,但原因是 Resolve 方法。当通过名称查找 ColumnDefinition 时,此 Resolve 方法返回一个有效对象,但在对 RowDefinition 执行完全相同的操作时,它返回 NULL。

GetFixUpToken 抛出的错误是:“NotImplementedException”,这是预期的,因为在查看 IXamlNameResolver 的源代码时(在本例中是类型:XamlNameResolverImpl)

在此处输入图像描述

查看此 XamlNameResolverImpl 的源代码时,您可以看到方法“GetFixUpToken”为空并引发 NotImplemented 异常(查看http://dotnetinside.com/en/framework/Microsoft+Expression/Microsoft.Expression.WpfPlatform /WpfMarkupExtensionValueSetter )

但问题是,正如我已经说过的,是 Resolve 调用,它对 columndefinition 工作正常,但对 rowdefinitions 失败......:

柱子: 在此处输入图像描述

排: 在此处输入图像描述

此时,我不知道该怎么办了......

源代码(示例项目)位于:http ://www.frederikprijck.net/stuff/MarkupExtension.rar

0 投票
1 回答
72 浏览

c# - 在标记扩展中获取其他组件值

几天前我开始使用标记扩展,但遇到了转储问题。

我有一个具有string属性的标记扩展,我不想使用 uer 在 a 中输入的值TextBox,有没有简单的方法可以做到这一点?

所以我有类似的东西:

0 投票
0 回答
132 浏览

c# - 通过 Binding Markup Extension 获取 Source 属性的 PropertyInfo

我正在通过模型属性中的属性处理错误模板

所以,每当绑定发生时,我想读取与源属性关联的自定义属性并将适当的验证规则添加到绑定

但考虑到绑定中的闲置场景,我无法找到简单的方法来获取属性信息 1. 相对源的可能性 2. 扩展绑定,如 Vm.SomeModel.Somotherobj.SomeProperty 3. 索引器

是否有任何简单的方法可以从 Binding 标记扩展中获取源的 PropertyInfo?

0 投票
1 回答
206 浏览

c# - 将标记扩展简写语法转换为完整的 Xml 形式

我有 XAML 字符串,如:

如何将所有大括号转换为代码中的元素,例如:

0 投票
1 回答
1426 浏览

c# - WPF - 为具有相对源绑定的自定义标记扩展提供设计时值

注意:这不仅仅是关于自定义标记扩展。请在标记为重复之前阅读。

我有一个带有转换器的 WPF 标记扩展,它们两个如下所示:

它们用于我正在设计的自定义窗口 - 当窗口最大化时,它们将用于切换某些值(边框宽度、边距等)。然而,在设计时,它们总是返回 null,这真的很痛苦,因为我的窗口看起来像这样:

在 Visual Studio 中预览窗口

...当它应该看起来像这样时:

运行时的窗口

(忽略第一张图片中缺少标题和图标,但是,如果您有解决方案,请随时回答 - 这本质上是同一个问题。)

出于显而易见的原因,使用它进行设计将非常困难。您在窗口预览中看到的唯一主要问题是我使用扩展名设置Row/ ColumnDefinitions 的地方 - 当它返回 null 时,Height/Width设置为1*. 所以,我的问题是是否有办法在设计时选择默认值,而不是绑定(例如非最大化值)。

0 投票
1 回答
381 浏览

c# - 标记扩展命名

我很确定答案是否定的,但是有没有办法以不同于实现它的类命名标记扩展?

我想制作一个名称相对较短的标记扩展:

但我想在 C# 端给它一个不同的(更长的)名称:

我发现的关于命名的唯一信息是在这个页面*Extension模式上,这不是我想要实现的。我希望存在一个允许我这样做的属性:

但是我检查了System.Windows.Markup 命名空间中的大多数属性,不幸的是没有这样的属性。

这个问题有什么解决办法吗?