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,所以也许我......)
答案 0 :(得分:4)
您需要将MarkupExtensionReturnType属性添加到您的班级:
[MarkupExtensionReturnType(ReturnType = typeof(string))]
public class MDL2 : MarkupExtension
{