2009-12-01 68 views
1

是否有任何情況下ContentPresenter的內容將成爲UIElement以外的某個對象?鑑於該字段被聲明爲對象而不是UIElement,似乎可能會有。但是,我想不出任何情況,或者即使它是有效的。將ContentPresenter.Content投射到UIElement是否合適?

ContentPresenter presenter = GetTemplateChild(PART_Presenter) as ContentPresenter; 
UIElement myElement = (UIElement)presenter.Content; 
myElement.SomeUIMethod(); // possible InvalidOperationException? 
+0

您將在第二行得到一個InvalidCastException,而在第三行得到InvalidOperationException – Nir 2009-12-01 09:36:38

回答

6

我做這一切的時候 - 以及整個MVVM方法是建立在非UIElement內容,這裏有一個例子:

創建一個不從UIElement派生的類,我會在這個例子中調用MyViewModelClass。

創建一個窗口,並添加該代碼

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     DataContext = new MyViewModelClass(); 
     InitializeComponent(); 
    } 
} 

,並添加一些內容控制在XAML:

<Button Content="{Binding}"/> 

現在你有一個ContentPresenter(Button控件內部模板)與MyViewModelClass作爲內容。

另一個(可能更常見)的例子是ItemControl - 讓我們例如ListBox,每個ListBoxItemContentPresenter已經是設置爲ItemsSource名單什麼的。

+0

謝謝,我認爲是這樣 – jeffora 2009-12-01 23:03:54

4

這裏是最基本的例子我能想到的

<Label Content="My Label" /> 

現在的內容屬性是不從UIElement派生的字符串。所以簡短的答案是肯定的,不僅可能,而且很可能會發生。