如何使用UWP MarkupExtension类?

时间:2017-11-07 11:28:49

标签: c# uwp markup-extensions

Fall Creators更新SDK添加了一个标记扩展类,很棒。 https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.markup.markupextension

所以我创建一个并覆盖" ProvideValue"方法

public class MDL2 : MarkupExtension
{
    ...

    public string Target { get; set; }

    protected override object ProvideValue()
    {
        ...
    }
}

我尝试在样式中使用它:

<Setter Property="IconGlyph" Value="{u:MDL2 Target='Delete'}" />

现在,这将正确调用MDL2扩展的构造函数,并将Target属性设置为&#34; Delete&#34;的字符串值。到目前为止一切都很好。

除此之外,从不调用ProvideValue覆盖,现在当访问IconGlyph的TemplateBinding时,我得到System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component. at Windows.UI.Xaml.FrameworkElement.MeasureOverride(Size availableSize),似乎没有尝试从标记扩展中实际获取值。

实际发生的是,而不是调用ProvideValue方法,它实际上也将属性值设置为MarkupExtension的实例......这不是我想要的,也不是我&#39 ; d期望标记扩展能够工作。

所以,我知道可能不会有很多答案,但是有没有人玩过这个课程,并且在UWP中得到了很好的解决方案?这是预期的吗?我的用法是否愚蠢?

(之前我从未实际使用任何形式的MarkupExtension,所以也许我......)

1 个答案:

答案 0 :(得分:4)

您需要将MarkupExtensionReturnType属性添加到您的班级:

[MarkupExtensionReturnType(ReturnType = typeof(string))]
public class MDL2 : MarkupExtension
{