How to Create Custom MarkupExtension like StaticResource?

后端 未结 1 2018
日久生厌
日久生厌 2021-01-05 20:58

please help me how to create a MarkupExtension looks like StaticResource of wpf, i have:

my own class:

public class Item{

public string Value{get; s         


        
相关标签:
1条回答
  • 2021-01-05 21:37

    You could take the resource key into your custom markup extension as a parameter via Constructor.

    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.

    Quick Implementation

    [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);
        }
    }
    

    You may have to add more code in ProvideValue to handle design mode, etc.

    0 讨论(0)
提交回复
热议问题