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中。错误依旧。郁闷中...

  • 相关阅读:
    最长双回文串
    BUUOJ misc 二维码
    HDU 1284 钱币兑换问题 (动态规划 背包方案数)
    HDU 1260 Tickets (动态规划)
    HDU 1231 最大连续子序列 (动态规划)
    HDU 1203 I NEED A OFFER! (动态规划、01背包、概率)
    BUUOJ reverse SimpleRev (爆破)
    BUUOJ reverse 不一样的flag
    HDU 1176 免费馅饼 (动态规划、另类数塔)
    HDU 1171 Big Event in HDU (动态规划、01背包)
  • 原文地址:https://www.cnblogs.com/Cajon/p/211487.html
Copyright © 2011-2022 走看看