none
ControlTemplate的TargetType值表示的目标类型如果有前缀的话,提示无效属性的错误 RRS feed

  • 问题

  • 以前在SilverLight2Beta2中正常运行的应用在SilverLight正式版中出现一个错误
    错误是这样出现的,我在一个自定义控件的资源定义中,定义了一个ControlTemplate,而这个ControlTemplate的目标类型
    ControlA是存放在另外的namespace中的一个从Control继承的类,结果在编译时出现了这样的提示错误“属性 TargetType 的属性值 XXX:ControlA 无效”,相关的代码大致如下:

    ControlA的定义:
    namespace MyNamespace
    {
        internal class
    ControlA: Control
    {
    //ControlA的类定义
    }
    }

    在引用ControlA的父控件中,相关代码如下:
    添加namespace引用
    xmlns:
    XXX="clr-namespace:MyNamespace"

    定义控件模板:
      <UserControl.Resources>       
            <ControlTemplate x:Key="MoveNodeAnimation" TargetType="
    XXX:ControlA">
      <!-- ControlTemplate的定义 -->
    </ControlTemplate>
      </UserControl.Resources> 


    麻烦高手帮忙分析一下,告诉小弟到底错误是出在哪里,有没有什么办法解决这个问题。谢谢大家了。
    2008年11月4日 11:34

答案

  •  

    internal   可以在当前项目调用  

    public 可以被外部成员调用

    就是说你新建的

    SilverLight Class Library如果生命 internal 只能在这个项目下调用,要在其他项目下调用这个class library就要声明成 public

     

    欢迎常来交流,呵呵

    2008年11月5日 7:04
    版主

全部回复

  • xmlns:XXX="clr-namespace:MyNamespace;assembly=MyNamespace"

     

    2008年11月4日 12:13
  • 你是自定义控件找不到是嘛?

    在SilverLight2 RC之后,你要把你的自定义样式的xaml放在 themes文件夹下, Beta2的时候是放在项目根下,不然就显示不出来滴

    2008年11月4日 16:39
    版主
  • 问题已经找到了,是因为自定义控件的可见性标志设错了,设成了internal,改成public就好了。
    虽然问题解决了,不过还是有点迷糊,因为引用这个自定义控件的控件是在同一个程序集内的,为什么会受internal的限制呢,回头我再好好研究下这个问题。
    不过从熊兄的回复里面还是得到了很有意义的信息,原来SilverLight2 RC增加了themes文件夹,这样样式文件就可以很整齐的存放了~这块回头也要学习下~
    2008年11月5日 6:42
  •  

    internal   可以在当前项目调用  

    public 可以被外部成员调用

    就是说你新建的

    SilverLight Class Library如果生命 internal 只能在这个项目下调用,要在其他项目下调用这个class library就要声明成 public

     

    欢迎常来交流,呵呵

    2008年11月5日 7:04
    版主