如何创建像 StaticResource 一样的自定义 MarkupExtension? [英] How to Create Custom MarkupExtension like StaticResource?
问题描述
请帮助我如何创建一个看起来像 wpf 的 StaticResource 的 MarkupExtension,我有:
please help me how to create a MarkupExtension looks like StaticResource of wpf, i have:
我自己的课程:
public class Item{
public string Value{get; set;}
public string Title{get;set;}
}
在我有的资源字典中:
// ...
<gpf:Item x:Key="firstone" Value="Hi" Title="Welcome"/>
//...
我想使用我的项目看起来像:
i want to use my Item looks like:
// ...
<TextBlock Text="{MyEX firstone}"/>
//...
我很累,但我不知道如何完成我的工作:
i tired to do this but i do not know how to finish my work:
//...
[Localizability(LocalizationCategory.NeverLocalize)]
[MarkupExtensionReturnType(typeof(string))]
public class MyEX : MarkupExtension
{
public MyEX () {
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return ??? ;
}
}
推荐答案
您可以通过构造函数将资源键作为参数放入您的自定义标记扩展中.
You could take the resource key into your custom markup extension as a parameter via Constructor.
然后,您可以在您的 ProvideValue 方法中创建一个 StaticResourceExtension
并通过调用 ProvideValue 方法获取实际资源(在您的情况下为 Item 的实例).
You could then, in your ProvideValue mehtod, create a StaticResourceExtension
and get the actual resource (in your case an instance of Item) by calling ProvideValue method.
快速实施
[MarkupExtensionReturnType(typeof(string))]
public class MyExtension : MarkupExtension
{
public MyExtension(string resourceKey)
{
ResourceKey = resourceKey;
}
string ResourceKey { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var staticResourceExtension = new StaticResourceExtension(ResourceKey);
var resource = staticResourceExtension.ProvideValue(serviceProvider) as Item;
return resource == null ? "Invalid Item" : String.Format("My {0} {1}", resource.Value, resource.Title);
}
}
您可能需要在 ProvideValue
中添加更多代码来处理设计模式等.
You may have to add more code in ProvideValue
to handle design mode, etc.
这篇关于如何创建像 StaticResource 一样的自定义 MarkupExtension?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!