如何创建像 StaticResource 一样的自定义 MarkupExtension? [英] How to Create Custom MarkupExtension like StaticResource?

查看:26
本文介绍了如何创建像 StaticResource 一样的自定义 MarkupExtension?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮助我如何创建一个看起来像 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆