问题标签 [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.
c# - Xamarin.Forms.Xaml.XamlParseException: 找不到 MarkupExtension
我正在尝试将自定义标记扩展与 Xamarin 表单一起使用,以便最终实现本地化。我正在尝试深入了解 Xamarin 表单示例。
这是一段使用扩展的 XAML 代码:
这是翻译扩展标记的代码:
我注释掉了一些代码,以防万一这是问题的原因。
每当我尝试运行它时,我都会收到错误消息:Xamarin.Forms.Xaml.XamlParseException: MarkupExtension not found for local:Translate。我很困惑为什么它没有找到标记扩展,因为我看到的所有示例似乎都是以相同的方式完成的。有人知道为什么会这样吗?一般来说,我在寻找 Xamarin 表单的好例子时遇到了很多麻烦。
c# - 如何使自定义 MarkupExtension 从 XAML 文件可见/可访问?
我有我的主应用程序,它使用另一个项目MarkupExtension
。我添加了引用,我也在 XAML 文件中添加了它,但是当我尝试使用它时出现错误:
我有TranslationExtension
它是MarkupExtension 的一个子类(它当然是公共的)。
我重建了整个解决方案——没有改变。
c# - 标记扩展在设计时不起作用
我有标记扩展允许我同时使用绑定和单元格模板GridView
。它在运行时工作正常,但在设计时不起作用,想知道我是否可以做些什么来解决这个问题。我已经测试了返回简单的字符串,而不是DataTemplate
仅仅为了确保自定义标记扩展在设计时通常工作 - 它工作,所以它应该以某种方式与返回的事实相关DataTemplate
。
更新:我已将代码简化为尽可能短,在实际情况下,通过应用程序有多个 GridView,每个网格包含多个列,这些列应该重用相同的模板,而且由于性能问题我不能使用 DataGrid。
c# - 在 Xaml 中指定强类型值的简写方式
这就是我想要的结果:
这是我目前正在做的事情:
c# - 带有 MarkupExtension 的 IValueConverter
最近我读到了一个IValueConverter
也继承自MarkupExtension
. 它是这样的:
用法比看起来像:
我习惯于使用来自 Resource 的转换器,例如:
我现在的第一个问题是:更好的方法是什么?如果我使用的是MarkupExtension-Version
(除了用法更容易输入),它有什么优势?
我还看到了一个非常相似的实现,如下所示:
如果我理解正确,第一个解决方案只会创建这个转换器的一个实例。第二个为每个 XAML 创建了这个转换器的一个新实例,对吗?
c# - 仅针对 UI 从 itemsource 中删除项目
我有一个与枚举绑定的组合框,我的枚举具有模型级别所需的 None 或 NA 值,但这些值与 UI 级别的用户无关。我不想向用户展示它们。我也不想使用单独的视图模型和视图的枚举。所以我做了一个标记扩展,它将从项目源中删除 None 或 NA。这是我的代码
我的视图绑定是
它在 UI 中工作正常,我在组合框中看不到 NA 和 none 值,但是当我启动应用程序时,UI 中的选定项目始终为空。
我的枚举是
我还在我的视图模型代码中设置 SelectedValue=value1 。任何人都可以解释为什么会发生这种情况以及我该如何解决这个问题。我希望正常行为,如所选项目应该按照绑定或第一个项目(如果所选项目为空)。
wpf - XAML 中的字符串插值
我正在考虑在 XAML 中推进 C# 6 字符串插值的方法,例如在一些简单的场景中使用它们而不是值转换器,例如在绑定到数字时用空字符串替换零。
从其设计讨论中:
内插字符串是一种构造字符串(或 IFormattable)类型值的方法,方法是编写字符串的文本以及将填充字符串中“孔”的表达式。编译器从插值字符串构造格式字符串和填充值序列。
但是,正如我所怀疑的那样,它们似乎不能从 XAML 中使用,因为它使用不同的编译器来生成 BAML,而且我在生成的.g.i.cs
文件中找不到字符串的痕迹。
- XAML 不支持字符串插值吗?
- 可能有什么解决方法?也许使用标记扩展来动态编译字符串插值?
c# - WPF 中的 ConstructorArgumentAttribute 使用问题
我创建了一个自定义标记扩展,如下所示
而且我发现我仍然可以使用{local:CME {x:Type sys:Boolean},Bool}
在 XAML 中创建 CME 类的实例,即使我删除了 CME 类中的所有 ConstructorArgumentAttribute。
所以我想知道为什么我们在自定义标记扩展实现中需要 ConstructorArgumentAttribute 或者 ConstructorArgumentAttribute 是什么意思。
有没有人可以帮助解决这个问题?非常感谢。
wpf - 在自定义标记扩展中解析设计时中的类型
我有以下问题:
If I do: MyExtension : StaticExtension
,
ProvideValue
VS2015 设计器并不总是调用。当它被调用时,我可以这样做:
...并解决我需要的类型。
如果我这样做: MyExtension : MarkupExtension
,它看起来像ProvideValue
我需要的方式调用但serviceProvider.GetService(typeof(IXamlTypeResolver));
返回null
。
有没有更好的办法?
wpf - XAML 设计器错误“无法将'System.Windows.StaticResourceExtension' 类型的对象转换为'System.Windows.Data.IValueConverter'。”
我正在使用开源 XAML 标记扩展<ComboBox>
从声明的enum
类型中填充 a,但在设计器中我收到这些错误(蓝色波浪线下划线文本):
无法将“System.Windows.StaticResourceExtension”类型的对象转换为“System.Windows.Data.IValueConverter”类型。
这是导致错误的 XAML(错误在ItemsSource
属性和值上):
资源在e2s
ResourceDictionary 中声明:
Enumerate
标记扩展来自这个GitHub 项目。
奇怪的是,当程序运行并将EnumerateExtension
枚举的成员(也已本地化)正确加载到 ComboBox 中时,这实际上是有效的。