DataTemplate在设计时

时间:2009-10-25 02:32:01

标签: wpf visual-studio-2008 datatemplate

在我第一次使用WPF尝试时,我走得太远了:

我有一个对象需要不同的DataTemplate,具体取决于其中一个属性。换句话说,if (object.property=="multi")然后模板应该是一个组合等等。

现在我已经开始了,显然使用DataTemplateSelector来应用所需的模板。并在运行时工作。在设计时vs2008设计师抱怨因为DataTemplateSelector使用Application.Current.MainWindow.FindResource以便找到适当的模板来应用,显然Application.Current在设计时不是我的应用程序,所以资源无法找到,所以设计师抛出一个例外。

鉴于我希望其他人能够更改模板,我真的需要设计时支持。

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

3 个答案:

答案 0 :(得分:1)

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

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

或者,只需在后面的代码中实例化并分配模板选择器。

答案 1 :(得分:0)

这只是我的头脑,所以我不确定它是否有效,但是如何使用数据触发器并使用setter分配适当的模板。

像“

<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>

答案 2 :(得分:0)

我想我已经找到了我的问题的答案(虽然它有自己的问题)。

DataTemplateSelector应具有公共属性来保存可能的模板。当您在XAML中实例化DataTemplateSelector时,您将向其传递相关模板,例如

  

&lt; TemplateSelector MultiTemplate1 = Template1,MultiTemplate2 = Template2 /&gt;

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