gpt4 book ai didi

c# - 如何创建像 StaticResource 这样的自定义 MarkupExtension?

转载 作者:行者123 更新时间:2023-11-30 17:48:13 26 4
gpt4 key购买 nike

请帮助我如何创建一个 MarkupExtension 看起来像 wpf 的 StaticResource,我有:

我自己的类(class):

public class Item{

public string Value{get; set;}
public string Title{get;set;}
}

在资源词典中我有:

// ...
<gpf:Item x:Key="firstone" Value="Hi" Title="Welcome"/>
//...

我想使用我的项目看起来像:

// ...
<TextBlock Text="{MyEX firstone}"/>
//...

我厌倦了这样做,但我不知道如何完成我的工作:

    //...
[Localizability(LocalizationCategory.NeverLocalize)]
[MarkupExtensionReturnType(typeof(string))]
public class MyEX : MarkupExtension
{
public MyEX () {
}

public override object ProvideValue(IServiceProvider serviceProvider)
{
return ??? ;
}
}

最佳答案

您可以通过构造函数将资源 key 作为参数带入您的自定义标记扩展。

然后,您可以在 ProvideValue 方法中创建一个 StaticResourceExtension并通过调用 Item 获取实际资源(在您的例子中是 ProvideValue 的实例)方法。

快速实现

[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 中添加更多代码处理设计模式等

关于c# - 如何创建像 StaticResource 这样的自定义 MarkupExtension?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com