问题标签 [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 回答
331 浏览

wpf - 难以理解和使用 xaml 标记扩展

我正在学习 WPF 的概念,例如数据绑定、命令、资源、元素绑定、样式等,它们广泛使用标记扩展,并且我在理解标记类背后的含义时遇到了问题,因为它们的使用超出了我知道它们应该用于。所以这里有几点我需要澄清:(所有代码片段都来自 C# 2010 书中的 Pro WPF)

  1. 静态扩展的含义和用途是什么?它可以用来声明静态资源,可以在 as 中声明,但是这个 xaml 让我很困惑:

    {x:Static SystemColors.ActiveCaptionBrush}中,静态在这里的作用是什么,如果我在这里使用 x:Dynamic 会发生什么变化?这本书说这个 xaml 相当于这个代码隐藏:

    cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;

    这意味着如果我有一个具有静态属性的类,我应该能够使用这样的东西:

    但它不起作用,尽管我创建了一个类,但我尝试使用 local:Static (指本地命名空间),但 VisualStudio 不允许我使用它。实现这一目标的正确方法是什么?

  2. Binding 的含义是什么(除了明显的含义,我绑定时发生了什么)?它用于资源绑定、数据或元素绑定。我能够理解元素绑定,但是绑定到不是元素的对象会导致问题。例如:

    这里将文本绑定到 SystemFonts.IconFontFamily 属性,在这种情况下 x:static 的用途是什么,以及如何将它绑定到我创建的类中的属性?如果绑定目标的值发生变化,如何更新文本字段的文本属性?由于绑定,它应该自己更新,是这样吗?

    书中的所有示例都使用了 SystemFonts.IconFontFamily,我所见过的没有一个解释了这种绑定的使用,以及如何为我创建的类做这件事?在这方面需要一些帮助。我想问更多关于绑定的问题,但我会在一个单独的关于绑定的问题中这样做。

  3. 最后,推荐一本书或资源来解释正在发生的事情,而不是如何做这个和那个?

0 投票
1 回答
41 浏览

xaml - 是否有任何标记允许我设置它的 DataContext 但不做任何图形?

我正在做一个事情不是“很好”的项目。因为我想为要放置控件的窗口的一部分创建类似于“部分模型”的东西,所以我想知道是否有一个标记可以让我指定其 DataContext 但不会更改窗口图形以任何方式(添加按钮和类似的东西)。

如果没有,我如何自己创建一个(我认为是通过继承 MarkupExtension),更重要的是:可以做到吗?

感谢您的任何回答

编辑1:

我的想法的一个例子是这个:

也许这可以帮助理解我的意思。

0 投票
2 回答
6731 浏览

c# - 如何创建返回集合的 XAML 标记扩展

我正在将 XAML 序列化用于对象图(在 WPF / Silverlight 之外),并且我正在尝试创建一个自定义标记扩展,该扩展将允许使用对 XAML 中其他地方定义的集合的选定成员的引用来填充集合属性。

这是一个简化的 XAML 代码段,演示了我的目标:

每个Country对象的Languages属性将填充一个IEnumerable<Language>,其中包含对 LanguageSelector 中指定的 Language 对象的引用是一个自定义标记扩展。

这是我尝试创建将担任此角色的自定义标记扩展:

事实上,这段代码几乎可以工作。只要在引用它们的对象之前在 XAML 中声明被引用对象,ProvideValue方法就会正确返回填充了被引用项的IEnumerable<Language> 。这是可行的,因为对Language实例的向后引用由以下代码行解析:

但是,如果 XAML 包含前向引用(因为Language对象是在Country对象之后声明的),它会中断,因为这需要修复标记(显然)不能转换为Language

作为一个实验,我尝试将返回的集合转换为Collection<object>,希望 XAML 稍后会以某种方式解析标记,但它会在反序列化期间引发无效的强制转换异常。

谁能建议如何最好地让它工作?

非常感谢,蒂姆

0 投票
0 回答
672 浏览

wpf - 使用 MEF 导出 MVVM 视图

我正在构建的应用程序有几个(10 多个)[Module]可执行文件。

我想在[Module]View.xaml文件中指定类似的内容。

其中mef:ExportViewaMarkupExtension为 MEF 作曲家准备零件。

目前,...

  • [Module]View.xaml.cs文件中,我用ExportView(typeof([Module]ViewModel)). (typeof 参数指定了预期的 ViewModel。)
  • 我还用[ExportViewModel]属性标记了我的 ViewModel。
  • (这两个属性都派生自 ExportAttribute。)
  • 每个可执行文件的应用程序类也继承自一个ApplicationBase执行 MEF 组合并结合/链接 View/ViewModel 的类。

现在,我希望能够从中删除所有代码隐藏,[Module]View.xaml.cs以防止我和我的同事忘记标记代码隐藏文件。

我认为这需要一个自定义的 MarkupExtension。我熟悉 MEF 的基础知识,以及使用元数据创建自定义导出属性。但是,我认为这个解决方案需要从一些MEF 原语派生。

0 投票
2 回答
731 浏览

c# - 显示默认图像并在实际图像完成加载后更改它

我有一个 WPF 标记扩展,负责按名称检索图像,返回一个BitmapImage对象。

由于检索图像是一项可能需要几秒钟的操作,因此我想显示默认图像并在准备好后显示请求的图像。

我试图做的是这样的事情,但由于这可能会改变BitmapImage对象,它不会更新 UI(示例代码):

有没有一种方法可以更新 UI 以使用修改后的BitmapImage(例如 INotifyPropertyChanged),或者是否有不同的方法来实现这一点?

0 投票
1 回答
1773 浏览

wpf - 使用标记扩展时如何转义逗号?

我正在使用的标记扩展的第二个参数的值是一个包含一些逗号的字符串,我不希望这些逗号被 xaml 解释器/解析器解释为参数分隔符,但是整个字符串包括逗号用作值。

这是一个例子:

谷歌没有帮助,我发现了一些类似的问题,但没有一个适用于这个问题:

0 投票
1 回答
1430 浏览

c# - 具有在 XAML 中指定的可本地化 ComboBoxItems 的 ComboBox

我有一个 ComboBox,我想用枚举成员填充它,并使用本地化的代表字符串。我知道执行此操作的标准方法是在代码隐藏中创建一个字典,其中枚举值作为键,文本作为值,然后将 ItemsSource 设置为该值。但是那样我就不能使用我性感的 MarkupExtension。所以,我想在 XAML 中执行此操作。我认为这很容易;这就是我所拥有的:

它几乎可以工作;下拉列表已正确填充,绑定正在工作,当我下拉下拉列表时,我可以看到选定的值,但无论我做什么,组合框的框部分都保持空白。我在这里做错了什么?

0 投票
2 回答
927 浏览

c# - 通过标记扩展注入命令是一种好习惯吗?

我有一个自定义标记扩展,它使用依赖注入来解析命令。这对我来说非常方便,因为我不必在视图模型中创建命令并为它们绑定。最近有人告诉我,在 mvvm 中使用这种标记扩展不是一个好习惯,我应该避免这种做法。真的吗?

标记扩展代码:

在 XAML 中使用:

0 投票
3 回答
6441 浏览

wpf - 如何将视图模型方法的结果数据绑定到 TextBox 属性?

在我的视图模型和模型中,我有一个签名为bool IsPropertyReadOnly(string propertyName). 此方法确定当前登录的用户是否可以编辑属性值。少数用户将能够编辑属性值,而其他大多数用户将具有只读访问权限。

我不想创建一个属性来返回每个模型属性的只读状态,而是想将结果绑定IsPropertyReadOny到该TextBox.IsReadOnly属性。

这就是我设想的语法:

DataContext包含视图模型,所以基本上我需要绑定IsReadOnly到调用的结果((Class)this.DataContext).IsPropertyReadOnly("Address")

使用 有很多文档ObjectDataProvider,但是对象数据提供者创建了一个新的对象实例,这不是我想要的。此外,要使用现有实例,我必须在代码隐藏中进行分配。再说一次,不是我想做的。

根据我的研究,似乎继承自BindingMarkupExtension更适合我的需求的解决方案。

任何帮助将不胜感激。

0 投票
2 回答
3866 浏览

.net - XAML 标记绑定到具有类型键的字典

我正在尝试Dictionary<Type,string>通过 xaml 绑定到一个。

问题是,标记扩展[]中的索引器将其内容解释为字符串。Binding这种情况下是否有某种“转义序列”?

(绑定不起作用,因为{x:Type ns:OnePrettyType}是以字符串形式发送的)