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

c# - 标记扩展和对象创建

目前我有这样的标记

我想把它缩短成这样

但是编译器会出错,因为 DatePartValueConverter 不是从 MarkupExtension 派生的。没有其他方法可以获取短格式标记来创建 DatePartValueConverter 的实例吗?

顺便说一句,我尝试从 MarkupExtension 派生,它确实解决了问题。我的 ProvideValue 实现看起来像这样

它有效,但我仍然不清楚它的起源和性质,serviceProvider以及人们可能会用它做什么。

有趣的是,当我在使用此标记扩展的绑定上使用 Visual Studio 2012 绑定编辑器时,它立即再次扩展它,使整个标记扩展支持变得毫无意义。

我可能应该提到,我需要为每个绑定提供一个私有实例,因为它维护内部状态 - 它需要知道整个 DateTime 值来设置某些方面,就像这样

0 投票
2 回答
1349 浏览

wpf - 如何将标记扩展方法应用于 XAML 中的绑定值?

我有一个字符串的本地化标记扩展方法,我可以通过这种方式应用它:

如何将此标记扩展方法应用于绑定结果?即类似的东西:

0 投票
1 回答
6984 浏览

wpf - 使用 DataBinding 值的 MarkupExtension

我正在尝试创建一个 WPF MarkupExtension 类,该类提供来自我的文本翻译类的翻译文本。翻译的东西很好用,但需要一个带有文本键的静态方法调用来返回翻译后的文本。像这样:

它的特点是它接受一个计数值以提供更好的措辞。

另一个例子:如果某件事还需要 4 分钟,那么它与只需要 1 分钟的词是不同的。如果文本键“minutes”被定义为任何数字的“Minuten”和计数为 1 的“Minute”,则以下方法调用将返回要使用的正确单词:

现在在 WPF 应用程序中,有很多 XAML 代码,其中包含大量文字文本。为了能够在不发疯的情况下翻译它们,我需要一个标记扩展,我可以传递我的文本键并在运行时返回翻译后的文本。这部分相当容易。创建一个继承自 MarkupExtension 的类,添加一个接受文本键作为参数的构造函数,将其存储在私有字段中,并让其 ProvideValue 方法返回存储键的翻译文本。

我真正的问题是:如何让我的标记扩展接受一个计数值,使其成为数据绑定并且当计数值更改时翻译文本会相应更新?

它应该像这样使用:

每当 FileCount 的绑定值更改时,TextBlock 必须接收新的文本值以反映更改并仍然提供良好的措辞。

我在那里找到了一个类似的解决方案:http: //blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection。 aspx但是,尽管我尝试遵循它,但我无法理解它的作用或它为什么会起作用。一切似乎都发生在 WPF 内部,提供的代码仅将其推向正确的方向,但尚不清楚如何。我无法适应它来做任何有用的事情。

我不确定让翻译语言在运行时更改是否有用。我想我需要另一个级别的绑定。为了保持较低的复杂性,我不会在基本版本工作之前尝试这样做。

目前没有我可以给你看的代码。它只是处于一种可怕的状态,它唯一做的就是抛出异常,或者不翻译任何东西。任何简单的例子都非常受欢迎(如果这种情况存在的话)。

0 投票
1 回答
4246 浏览

c# - “System.Windows.Data.Binding”不是属性“SelectedIndex”的有效值

有人可以解释一下这个错误吗?

起初我以为 SelectedIndex 可能只是不是 DependencyProperty 并且不能绑定,但我错了。

如果我使用普通绑定而不是标记扩展名src:ValidatedBinding,或者如果我保留标记扩展名但绑定SelectedItem而不是SelectedIndex,那么它可以工作。

这是一个演示问题的小应用程序。

主窗口:

主窗口后面的代码:

标记扩展的代码:

我运行此应用程序时的异常:

System.Windows.Markup.XamlParseException 发生
HResult=-2146233087 Message= 'Set property 'System.Windows.Controls.Primitives.Selector.SelectedIndex' 引发异常。' 行号 '9' 和行位置 '19'。
来源=PresentationFramework LineNumber=9 LinePosition=19
StackTrace:在 System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader,布尔 skipJournaledProperties,对象 rootObject,XamlObjectWriterSettings 设置,Uri baseUri)处的 System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader,布尔型 skipJournaledProperties,对象 rootObject , XamlAccessLevel accessLevel, Uri baseUri) 在 System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) 在 System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) 在 WpfApplication2.MainWindow。 InitializeComponent() in c:\Users\Administrator\Documents\Visual Studio 2012\Projects\WpfApplication2\MainWindow.xaml:line 1 at WpfApplication2.MainWindow..ctor() in c:\Users\Administrator\Documents\Visual Studio 2012\Projects\WpfApplication2\MainWindow.xaml.cs:第 12 行
InnerException:System.ArgumentException HResult=-2147024809 消息= “System.Windows.Data.Binding”不是属性“SelectedIndex”的有效值. Source=WindowsBase StackTrace:在 System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp,对象值,PropertyMetadata 元数据,布尔 coerceWithDeferredReference,布尔 coerceWithCurrentValue,OperationType operationType,布尔 isInternal)在 System.Windows.DependencyObject.SetValue(DependencyProperty dp,对象值)在 System.Windows.Baml2006.WpfMemberInvoker.SetValue(Object instance, Object value) 在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value) 在 MS.Internal.Xaml.Runtime.ClrObjectRuntime。 SetValue(Object inst, XamlMember property, Object value) InnerException:

0 投票
1 回答
496 浏览

wpf - 将标记扩展写为嵌套元素

是否可以将标记扩展编写为嵌套元素而不是属性?我正在尝试Boolean用作ResourceDictionary条目的键。

ResourceDictionary键类型为字符串的当前代码:

所需的代码,但由于以下原因无法编译:

无法识别的标签 x:Key

XAML

0 投票
2 回答
2308 浏览

c# - WPF 设计器中标记扩展参数的设计时检查

我已经为 WPF 编写了一个标记扩展,它允许我做

这是一个非常有用的扩展,在运行时效果很好。但是在设计时我看不到应用的样式,或者如果我错误地输入粗体和斜体,它们可能不会被找到为静态资源。

我可以做些什么来让它工作?

扩展的源代码是

0 投票
1 回答
1110 浏览

c# - XAML 中用于绑定到 ISubject 的标记扩展

如果我有以下视图模型

和一些想象中的 XAML 代码

我希望这两种方式的绑定能够表现得那样

  • 在 UI 中更新文本框时调用 Subject.onNext
  • 通过订阅 Subject.Subscribe 来更新文本框

由于 WPF 仅直接支持 INPC,我的想法是通过标记扩展创建代理 INPC 对象

代理将这样连接到主题

注意 WhenAny 是ReactiveUI订阅 INPC 事件的助手。

但是我需要生成一个绑定并通过标记扩展返回它。

我知道我想做什么,但无法弄清楚标记扩展的魔力将它们组合在一起。

0 投票
1 回答
1276 浏览

wpf - WPF 中带有状态的标记扩展

我刚刚发现 WPF 标记扩展实例在控件模板中被重用。因此,控制模板的每个副本都会获得相同的标记扩展集。

如果您希望扩展程序为其附加的每个控件保持某种状态,这将不起作用。任何想法如何解决这个问题。

0 投票
1 回答
2471 浏览

wpf - 是否可以在 MultiBinding 中使用 DynamicResource?

在这种情况下,我希望使用在资源字典中声明的字符串作为Text属性绑定的一部分。仅绑定单个动态资源字符串不是问题:

但是,如果您需要在MultiBinding上使用StringFormat ,您很快就会遇到问题,因为您需要插入动态文本或想要组合多个字符串。例如,如果我的 MultiBinding 看起来像这样:

我可以从指定的资源文件中注入string1string2绑定文本,那里没有问题。但是我找不到以相同方式使用动态资源中的字符串的方法。(我正在使用这种方法将公司和产品名称注入到合并资源字典中的文本中)。

使用TextBlock ,我可以通过对 TextBlock 内容(参考)使用多个Run项目来规避此问题:

但这在需要将动态资源绑定到Window Title属性时无济于事。有没有办法通过(创造性的,如有必要)使用现有的标记扩展(如x:Static等)来实现这一点?还是我们必须编写自己的标记扩展来实现这一点?

0 投票
3 回答
2634 浏览

c# - 使用转换器创建标记扩展

我正在尝试创建一个标记扩展,它将采用一个 HTML 字符串,将其转换为 FlowDocument,然后返回 FlowDocument。我对创建标记扩展相当陌生,我希望这对有更多经验的人来说是显而易见的。这是我的代码:

更新:这是 XAML。

还有我的 VS 错误列表:

  • 解析标记扩展时遇到类型“MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension”的错误 3 未知属性“源”。第 89 行位置 49。
  • 错误 1 ​​类型“HtmlToXamlExtension”不包括具有指定数量参数的构造函数。
  • 错误 2 类型“HtmlToXamlExtension”的构造函数没有 0 个参数。