Fall Creators 更新 SDK 添加了标记扩展类,非常棒。https://learn.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 属性设置为字符串值“Delete”。到目前为止,一切都很好。
除此之外,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 的实例...这不是我想要的,也不是我期望标记扩展的工作方式。
所以,我知道这个问题可能不会有很多答案,但是有人使用过这个类并让它在 UWP 中运行良好吗?这是预期的吗?我的使用方式很愚蠢吗?
(我以前从未以任何形式实际使用过 MarkupExtension,所以也许我......)
您需要添加标记扩展返回类型您的班级属性:
[MarkupExtensionReturnType(ReturnType = typeof(string))]
public class MDL2 : MarkupExtension
{
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)