• [Avalon]如何实现自定义MarkupExtension.


    在Avalon中,微软提供了对XAML扩展的功能——MarkupExtension。按照文档以及参考了Binding,NullExtension类的实现,我认为只要自定一个类型从MarkupExtension类型继承,实现其中的抽象方法,就可以再XAML中使用如下的语法进行引用。

    类型定义:

    using System.Windows.Serialization;
    namespace MarkupExtensionNS
    {
        
    public class MyMarkupExtension : MarkupExtension
        {
            
    public MyMarkupExtension()
            {
            }

            
    public override object ProvideValue(object targetObject, object 
    targetProperty)
            {
                
    return "OK";
            }
        }
    }

    引用:

    <?Mapping XmlNamespace="CodeMapNS" ClrNamespace="MarkupExtensionNS" ?>
    <Window x:Class="MarkupExtensionNS.Window1"
        xmlns
    ="http://schemas.microsoft.com/winfx/avalon/2005"
        xmlns:x
    ="http://schemas.microsoft.com/winfx/xaml/2005"
        Text
    ="MarkupExtension"
        xmlns:c
    ="CodeMapNS"
        
    >
        
    <Grid>
            
    <TextBlock TextContent="{c:MyMarkupExtension}"/>
        
    </Grid>
    </Window>

    呵呵,看起来应该没有问题,相当于给TextBlock的TextContent附值"OK". 但是编译报错。如下:
    MS.Internal.Markup.XamlParseException: The value '{c:MyMarkupExtension}' is not a valid MarkupExtension expression. Could not resolve 'MyMarkupExtension' in namespace 'CodeMapNS'. 'MyMarkupExtension' must be a subclass of MarkupExtension. Line 9 Position 14.

    怀疑是MyMarkupExtension需要在XAML之前进行编译,我将MyMarkupExtension移到一个独立的Assembly中。错误依旧。郁闷中...

  • 相关阅读:
    Java8新特性Stream详细教程
    自定义注解!绝对是程序员装逼的利器!!
    如何处理重复请求/并发请求的
    C#字符处理
    mysql 索引
    mysql事件【定时器】
    JS日期,金钱处理
    Controller中使用@Value无法获取属性值
    druid连接池的配置
    mybatiste报错java.lang.ClassCastException
  • 原文地址:https://www.cnblogs.com/Cajon/p/211487.html
Copyright © 2020-2023  润新知