Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 设计时的数据模板_Wpf_Visual Studio 2008_Datatemplate - Fatal编程技术网

Wpf 设计时的数据模板

Wpf 设计时的数据模板,wpf,visual-studio-2008,datatemplate,Wpf,Visual Studio 2008,Datatemplate,在使用WPF的第一次尝试中,我走得有点太远了: 我有一个对象需要一个不同的DataTemplate,这取决于它的一个属性。换句话说如果(object.property==“multi”)那么模板应该是一个组合,等等 现在我已经开始使用DataTemplateSelector来应用所需的模板。在运行时,这是可行的。在设计时vs2008设计器会抱怨,因为DataTemplateSelector使用Application.Current.MainWindow.FindResource来查找要应用的适当

在使用WPF的第一次尝试中,我走得有点太远了:

我有一个对象需要一个不同的DataTemplate,这取决于它的一个属性。换句话说
如果(object.property==“multi”)
那么模板应该是一个组合,等等

现在我已经开始使用DataTemplateSelector来应用所需的模板。在运行时,这是可行的。在设计时vs2008设计器会抱怨,因为DataTemplateSelector使用Application.Current.MainWindow.FindResource来查找要应用的适当模板和应用程序。设计时的Current不是我的应用程序,因此无法找到资源,因此设计器引发异常

考虑到我希望其他人能够更改模板,我真的需要设计时支持

有办法解决我的问题吗?
我的整个方法是否完全有缺陷?

您可以为每种模板的模板选择器添加一个依赖项属性,并引用XAML中的模板:

<local:MyTemplateSelector x:Key="myTemplateSelector"
  Template1="{StaticResource tpl1}"
  Template2="{StaticResource tpl2}"
/>


或者,在代码隐藏中实例化并分配模板选择器。

这只是我的想法,所以我不确定它是否有效,但如何使用datatriggers并使用setter分配适当的模板呢

类似于“


...

我想我已经找到了我问题的答案(尽管它本身也有问题)

DataTemplateSelector应该有公共属性来保存可能的模板


这实现了设计时支持。另一方面,实例化选择器时需要知道可能的模板是什么,但情况并非总是如此。

谢谢你的回答。第一种解决方案可以工作,但鉴于我拥有的模板数量,它是不切实际的。第二种解决方案似乎不起作用,除非有这是我不明白的。第二种方法如何不起作用?如果模板选择器在代码背后实例化,标记对此一无所知,设计时应该可以。我认为我不起作用,因为在设计时,例如Window或App的构造函数中的任何用户代码都没有执行。请参见此处这是what@Sergey建议道。为什么你需要再次发布相同的答案?
<ContentControl>
        <ContentControl.Style>
            <Style TargetType="{x:Type ContentControl}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Property}" Value="multi">
                        <Setter Property="ContentTemplate" Value="{StaticResource templateKey}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentControl.Style>
        ...
    </ContentControl>