2009-10-25 30 views
1

在我與WPF第一次嘗試我又有點過頭:的DataTemplate在設計時

我有一個需要依賴於它的一個屬性不同的DataTemplate的對象。換句話說,if (object.property=="multi")那麼模板應該是組合等等。

現在我已經開始了,顯然使用了DataTemplateSelector來應用所需的模板。並且在運行時可以工作。在設計時vs2008設計師抱怨,因爲DataTemplateSelector使用Application.Current.MainWindow.FindResource來找到合適的模板來應用,顯然Application.Current在設計時並不是我的應用程序,所以無法找到資源,所以設計師拋出異常。

鑑於我希望其他人能夠更改模板,我真的需要設計時支持。

有沒有解決我的問題? 我的整個方法是完全有缺陷的嗎?

+0

第二種方法不起作用?如果模板選擇器在後面的代碼中被實例化,則標記不知道它,並且設計時間應該很好。 – 2009-10-25 19:54:05

+0

我認爲,我不工作,因爲在設計時,窗口或應用程序的構造函數中的任何用戶代碼都不會執行。另請參閱http://www.west-wind.com/weblog/posts/791658.aspx – christos 2009-10-27 12:02:13

回答

0

我想我已經找到了答案,我的問題(儘管它有其自身的問題)。

的DataTemplateSelector應該具有公共屬性,以保持可能的模板。當您在XAML中實例化DataTemplateSelector時,將相關模板傳遞給它,如

< TemplateSelector MultiTemplate1 = Template1,MultiTe mplate2 = Template2 />

這實現了設計時支持。另一方面,它要求您在實例化選擇器時知道可能的模板是什麼,事實並非總是如此。

+0

這是@Sergey建議的。爲什麼你需要再次發佈相同的答案? – dotNET 2017-02-12 08:06:26

0

你可以依賴屬性添加到您的模板選擇的各種模板和XAML參考模板:

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

或者,只是實例化和代碼模板選擇背後的分配。

+0

感謝您的回答。 第一個解決方案可以工作,但鑑於我有多少模板,這是不切實際的。 第二個解決方案似乎不起作用,除非有什麼我沒有得到。 – christos 2009-10-25 13:16:16

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> 
相關問題