Tag: markup extensions

MarkupExtension.ProvideValue – 是否实际使用了IServiceProvider?

我正在阅读我的一些旧代码,并遇到了一个混合的IValueConverter / MarkupExtension类。 它让我想知道ProvideValue方法中的IServiceProvider是否真的有用,以及它如何有用? 我看到IServiceProvider只有一个方法: GetService ,必须转换为正确的服务类型。 我还查看了MarkupExtension.ProvideValue MSDN页面,它列出了不同类型的服务。 我想,我只是想知道这些服务是否有用,或者我应该保留我的方法呢? 现行方法: public Object ProvideValue(IServiceProvider serviceProvider) { return new MyConverter(); } 基本上,我应该做以下事情: public Object ProvideValue(IServiceProvider serviceProvider) { var provider = serviceProvider as SomeType; if (provider == null) return new MyConverter(); //Do something with the provider here? }

可以在WPF中使用与XAML 2009相关的标记扩展吗?

我在谈论扩展,例如x:Reference和x:FactoryMethod , 这里集体出现。 我在网上阅读了很多相互矛盾的信息,包括MSDN,Stackoverflow和其他来源。 我将以x:Reference为例进行讨论,但我实际上也指的是其他标记扩展。 混淆的主要原因如下MSDN的摘录: WPF中的XAML 2009语言支持 在WPF中,您可以使用XAML 2009function,但仅适用于非WPF标记编译的XAML。 标记编译的XAML和BAMLforms的XAML目前不支持XAML 2009语言关键字和function。 请注意,在WPF中加载松散XAML的现有技术也可能对CLR类型和类型系统有安全性和访问限制,这些限制比标记编译的XAML更具限制性。 有关更多信息,请参阅安全性(WPF)或WPF安全策略 – 平台安全性。 XAML 2009还引入了其他function,可以修改以前的XAML 2006构造或修改基本标记表单。 x:参考标记扩展 x:Reference是在XAML 2009中定义的构造。在WPF中,您可以使用XAML 2009function,但仅适用于非WPF标记编译的XAML。 标记编译的XAML和BAMLforms的XAML目前不支持XAML 2009语言关键字和function。 但是,以下段落出现在前一段之前(即关于x:Reference那一段)。 在WPF和XAML 2006中,元素引用由ElementName绑定的框架级function处理。 对于大多数WPF应用程序和方案,仍应使用ElementName绑定。 此一般指导的例外情况可能包括存在数据上下文或其他范围考虑因素的情况,这些因素使得数据绑定不切实际且不涉及标记编译。 这里没有直接的矛盾,但这一段似乎说可以在应用程序中使用x:Reference 。 此外,关于x:Reference段落似乎是自动生成的,可能已经过时了。 然后,我们从“WPF 4 Unleashed”一书中摘录如下: x:引用标记扩展通常与XAML2009function错误关联,这些function只能在撰写本文时从松散的XAML中使用。 虽然x:Reference是WPF 4中的一个新function,但只要您的项目针对.NET Framework的版本4或更高版本,就可以在XAML2006中使用它。 我们还有以下Stackoverflow问题,其中一些问题的答案相互矛盾,而且没有一个明显正确: 什么是x的替代品:参考? XAML 2009 – x:参考 – 使用它的任何缺点? 何时是x:WPF中的引用已解决,为什么XAML元素顺序会影响它? 最后,我个人使用x:Reference扩展,它似乎在WPF应用程序中工作,无论MSDN说什么,即使Visual Studio有时会抱怨奇怪的事情(或者它可能是ReSharper),例如在标记。 了解实际问题, 可以在WPF应用程序中使用XAML 2009(全部或部分)吗? 这些特定扩展可以用于编写WPF应用程序吗? […]

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

我正在使用XAML序列化作为对象图(在WPF / Silverlight之外),我正在尝试创建一个自定义标记扩展,它允许使用对XAML中其他地方定义的集合的选定成员的引用来填充集合属性。 这是一个简化的XAML片段,演示了我的目标: 每个Country对象的Languages属性将使用IEnumerable 填充,其中包含对LanguageSelector中指定的Language对象的引用,该对象是自定义标记扩展。 以下是我尝试创建将在此角色中使用的自定义标记扩展: [ContentProperty(“Items”)] [MarkupExtensionReturnType(typeof(IEnumerable))] public class LanguageSelector : MarkupExtension { public LanguageSelector(string items) { Items = items; } [ConstructorArgument(“items”)] public string Items { get; set; } public override object ProvideValue(IServiceProvider serviceProvider) { var service = serviceProvider.GetService(typeof(IXamlNameResolver)) as IXamlNameResolver; var result = new Collection(); foreach (var item in Items.Split(new[] { ‘,’ […]

改进了IValueConverter – MarkupExtension还是DependencyObject?

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