当前位置:  开发笔记 > 编程语言 > 正文

MarkupExtension作为Template中的计算属性

如何解决《MarkupExtension作为Template中的计算属性》经验,为你挑选了1个好方法。

有这样的MarkupExtension

public class Extension1 : MarkupExtension
{
    private static int _counter = 0;

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return string.Format("Item {0}", _counter++);
    }
}

和这个XAML


  
  
  

我得到这样的清单:

Item 1
Item 2
Item 3

现在我尝试使用此Style生成相同的列表


并有这样的XAML


我明白了

Item 0
Item 0
Item 0

所以{my:Extension1}仅评估一次.我可以创建一个将为每个项目评估的计算属性吗?



1> Thomas Leves..:

尝试从ProvideValue而不是字符串返回一个对象

菲尔是在正确的轨道上...其实,你需要返回thisProvideValue您的标记扩展从模板调用.这将导致为模板生成的每个控件评估标记扩展.要确定调用ProvideValue是否来自模板,您需要检查目标对象:在模板中,它将是类型System.Window.SharedDp.我写了一篇关于此的博客文章.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有