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