Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在designtime上解析ContentControl ContentTemplateSelector?_Wpf_Contentcontrol - Fatal编程技术网

Wpf 如何在designtime上解析ContentControl ContentTemplateSelector?

Wpf 如何在designtime上解析ContentControl ContentTemplateSelector?,wpf,contentcontrol,Wpf,Contentcontrol,为什么我无法在designtime上解析ContentControl ContentTemplateSelector? (在运行时工作) 设计器(VS2010)显示了一个异常: System.Reflection.TargetInputException异常 异常已由 调用的目标 及 System.NullReferenceException对象 引用未设置为的实例 反对 XAML: 我怀疑Application.Current.MainWindow在设计时没有设置。H.B.关于Applicat

为什么我无法在designtime上解析ContentControl ContentTemplateSelector?
(在运行时工作)
设计器(VS2010)显示了一个异常:

System.Reflection.TargetInputException异常 异常已由 调用的目标

System.NullReferenceException对象 引用未设置为的实例 反对

XAML:


我怀疑
Application.Current.MainWindow
在设计时没有设置。

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 );
}

<>你的代码的其他部分仍然是不完整的,所以我希望你正处于中间。例如,您的
DataTemplate
应该具有绑定,而不是硬编码的值。

您的类真的被称为
myTemplateSelector
?这与XAML不匹配。调用正常,这是一个拼写错误。(如果它在运行时工作,这意味着它可以)您仍然应该编辑您的问题,但是…我有这个问题,这是因为在设计时,它可能没有一些对象,因为它在运行时。请确保在尝试了这里的一些示例后重新构建解决方案,因为我不得不这么做。这是一个示例,ContentControl将包含在datagrid columnheader样式中,它将为每个列标题加载特定的模板(基于标题的名称)
    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...
         }

    }
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 );
}