微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在设计时解析ContentControl ContentTemplateSelector?

如何解决如何在设计时解析ContentControl ContentTemplateSelector?

| 为什么在设计时无法解析ContentControl ContentTemplateSelector? (在运行时有效) Designer(VS2010)显示一个例外:   System.Reflection.TargetInvocationException   异常已被抛出   调用的目标。 和   System.NullReferenceException对象   引用未设置为的实例   宾语。 XAML:
<Window.Resources>
    <DataTemplate x:Key=\"Temp1\">
       <TextBox textwrapping=\"Wrap\" Text=\"1\" Height=\"20\" Width=\"Auto\"/>
    </DataTemplate>

    <local:TemplateSelector x:Key=\"mySelector\"/>
    <Grid>
       <ContentControl ContentTemplateSelector=\"{StaticResource mySelector}\">
          <ContentControl.Content>
               1
          </ContentControl.Content>
       </ContentControl>      
    </Grid>
 </Window.Resources>
C#:
    public class TemplateSelector : DataTemplateSelector
    {
        public override DataTemplate SelectTemplate(object item,DependencyObject container)
        {
             //int num = int.Parse(item.ToString());
             Window win = Application.Current.MainWindow;
             return win.FindResource(\"Temp1\") as DataTemplate;//load template based on num...
         }

    }
    

解决方法

        H.B.在设计时,
Application.Current.MainWindow
null
是正确的。这是按名称检索资源的更好方法:
public override DataTemplate SelectTemplate( object item,DependencyObject container ) {
    var element = container as FrameworkElement;
    if ( element != null ) {
        var template = element.TryFindResource( \"Temp1\" ) as DataTemplate;
        if ( template != null ) {
            return template;
        }
    }
    return base.SelectTemplate( item,container );
}
但是,您代码的其他部分仍然不完整,所以我希望您只是其中一部分。例如,您的“ 5”应该具有绑定,而不是硬编码的值。     ,        我怀疑在设计时未设置
Application.Current.MainWindow
。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。