zoukankan      html  css  js  c++  java
  • [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中。错误依旧。郁闷中...

  • 相关阅读:
    laravel5.1框架简介及安装
    数据结构之队列定义及基本操作实现
    PHP之闭包详解
    数据结构之栈定义及基本操作实现
    PHP之MVC微型框架简单搭建
    对web应用中单一入口模式的理解及php实现
    php面向对象编程学习之高级特性
    数据结构之链表定义及基本操作实现
    数据结构之数组定义及基本操作
    感悟
  • 原文地址:https://www.cnblogs.com/Cajon/p/211487.html
Copyright © 2011-2022 走看看