2009-12-01 185 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派生的字符串。所以简短的答案是肯定的,不仅可能,而且很可能会发生。