问题标签 [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 投票
1 回答
308 浏览

c# - 何时评估 x:Static 类型转换器:运行时还是编译时?

我有一个 wpf 应用程序,我开始对其进行本地化。我选择的本地化策略是创建我的自定义 MarkupExtension 类。

我不会使用 .res 文件,因为在我的公司已经制定了一个解决方案,它创建一个包含所有字符串的加密映射,并且它需要 int 键来引用每个字符串。所以我编写了一个自定义生成器,它使用所有“int”键创建一个枚举(可能是一个带有整数的静态类,这并不重要)。

所以我想在我的 XAML 文件中引用这些枚举键中的每一个,执行以下操作:

创建的枚举是TranslatedEnums,我的翻译类称为Translator(dhu)。

但是在阅读了 x:Static文档类型转换器文档之后,我想到了以下问题:

“已编译的 xaml”(baml)是否在运行时或编译时实际评估每种类型(通过 x:Static)?

我问这个是因为我静态引用枚举值的原因之一是我没有确切的枚举字符串键,而是它的值,这会使破解应用程序变得更加困难。

如果解析是在运行时完成的,那么我可以将以前的代码缩小到:

这需要我自己查找枚举值,但这是单行的:

这将使 Xaml 代码更小(这很好),但如果密钥不存在(这不是问题),它将在编译时失败。

0 投票
2 回答
732 浏览

.net - VB.Net 中的 WPF 标记扩展不起作用

我正在尝试根据此博客文章创建一个 VB.Net 标记扩展,但在 vb.net

但它在抛出

错误 1 ​​未知的构建错误,'键不能为空。参数名称:key Line 9 Position 62.' C:\Users\jessed.ECREATIVE\My Dropbox\Projects\c2d2\c2d2\Application.xaml 9 62 c2d2

我将示例的 c# 部分转换为

我错过了什么吗?任何帮助将不胜感激

0 投票
2 回答
658 浏览

c# - WPF MarkupExtension 确定嵌入 XAML 的程序集

我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为 Pages 作为程序集嵌入。在 XAML 中,我需要在另一个程序集中声明 MarkupExtension,该程序集对 XAML 的程序集没有特定的知识。

现在,我需要这个 MarkupExtension 才能访问嵌入 XAML 的程序集。这怎么可能?

0 投票
1 回答
383 浏览

xaml - Silverlight 5:在 IMarkupExtension 类上设置 ConstructorArgument

我想要一个可以只用一个值启动的 MarkupExtension,就像Binding

<TextBox Text="{Binding MyPath}"/>代替<TextBox Text="{Binding Path=MyPath}">

在 WPF 中,这是通过 完成的ConstructorArgumentAttribute,但在 Silverlight 中不存在。
我检查了属性的Path属性,Binding但没有找到任何应​​用于它的属性。

有任何想法吗?

0 投票
1 回答
172 浏览

c# - C#如何先执行标记事件?

我有这个 markupExtension 类

而这个 Xaml

后面的代码

我希望我的标记类中的方法比后面代码中的方法先执行。

我尝试添加和删除 EventHandler,但为此我需要事件名称(“Button_Click”)。但不能使用它的硬代码。

还有其他方法可以识别吗?

谢谢。

0 投票
2 回答
389 浏览

c# - Silverlight 中 MarkupExtension 继承的替代方案

我在我的 WPF 应用程序中使用 MarkupExtension 继承,我想在 Silverlight 下移植。

我制作了一个“区域设置”标记扩展,可以在 xaml 中像这样使用

事实上,这个 MarkupExtension 将其应用到的属性绑定到字符串“我的默认翻译”,或者,如果找到的话,绑定到存储在名为“aRandomId”的数据库中的句子。

这个 MarkupExtension 允许我动态更改我的 UI 的语言环境(markupextension 正在注册到一个弱事件“LocaleChanged”,它会触发与它绑定的每个属性的更新)

由于我们不能从 Silverlight 中的 MarkupExtension 继承,我想知道是否有某种机制可以替代它。

谢谢。

PS:如果需要,我可以提供这个 MarkupExtension 的来源。

0 投票
2 回答
4238 浏览

c# - MarkupExtension.ProvideValue -- 是否实际使用了 IServiceProvider?

我正在浏览我的一些旧代码,并遇到了一个混合IValueConverter/MarkupExtension类。这让我想知道IServiceProviderProvideValue方法是否真的有用,以及它将如何有用?

我看到IServiceProvider只有一种方法:GetService,它必须转换为正确的服务类型。我还查看了MarkupExtension.ProvideValue MSDN 页面,它列出了不同类型的服务。我想,我只是想知道这些服务中的任何一个是否有用,还是应该让我的方法保持原样?

当前方法:

基本上,我应该执行以下操作:

0 投票
2 回答
10031 浏览

c# - 改进的 IValueConverter -- MarkupExtension 或 DependencyObject?

我在网上看到了两种增强 IValueConverter 的不同方法。其中一个从 MarkupExtension 扩展了 ValueConverter,另一个从 DependencyObject 扩展。我不能从两者延伸,所以我想知道是否有一个比另一个更好?

0 投票
6 回答
6022 浏览

c# - 从代码设置自定义 MarkupExtension

你如何MarkupExtension从代码中设置自定义?

您可以从 Xaml 轻松设置 if。Binding和也是如此DynamicResource

通过后面的代码设置相同的值需要一些不同的方法

  1. 绑定:使用 textBox.SetBinding 或 BindingOperations.SetBinding

    /li>
  2. 动态资源:使用 SetResourceReference

    /li>
  3. CustomMarkup:如何MarkupExtension从代码中设置自定义?在这种情况下,我应该打电话给我ProvideValue,我该如何获得IServiceProvider?*

    /li>

我在这个问题上发现的很少,所以可以做到吗?


HB已经回答了这个问题。只是在这里添加一些细节来说明我为什么要这样做。我试图为以下问题创建一个解决方法。

问题是你不能派生Binding和覆盖ProvideValue,因为它是密封的。您将不得不这样做:自定义 WPF 绑定标记扩展的基类。但是问题是,当您将 a 返回Binding到 a时Setter,您会遇到异常,但在 a 之外Style它可以正常工作。

我已经在几个地方读到过,如果它是 a ,则您应该返回它MarkupExtension本身,以允许它在应用于实际时重新评估,这是有道理的。TargetObjectSetterFrameworkElement

但是,这只适用TargetProperty于 type object,否则异常返回。如果您查看源代码,BindingBase您会发现它确实做到了这一点,但该框架似乎有一些使其工作的秘密成分。

0 投票
1 回答
550 浏览

wpf - 当前绑定值

我正在编写标记扩展。我有这样的 XAML

和带有构造函数的 TestExtension 采用一个字符串参数。我得到“SomeInfo”字符串,所以一切都找到了。现在我想嵌套扩展并编写类似的东西

它不能按原样工作。我必须添加一个构造函数,它接受一个 System.Windows.Data.Binding 类型的参数。

现在我需要知道

  1. 我应该如何从 Binding 对象中检索当前值?
  2. 我什么时候应该这样做?我应该以某种方式订阅更改还是每次在 ProvideValue 方法中都要求该值?

Update1 PropName 应针对 TextBlock 的 DataContext 进行解析。

Update2刚刚发现相关问题:如何解析数据绑定的值?