将ContentPresenter.Content强制转换为UIElement是否合适?

时间:2009-12-01 05:39:18

标签: c# wpf contentpresenter uielement

是否有ContentPresenter的内容是UIElement以外的某个对象的情况?鉴于该字段被声明为对象而不是UIElement,似乎可能存在。但是,我想不出任何情况,或者即使它有效。

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

2 个答案:

答案 0 :(得分: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为例,每个ListBoxItem都有一个ContentPresenter,其中包含列表设置中的任何内容ItemsSource

答案 1 :(得分:4)

这是我能想到的最基本的例子

<Label Content="My Label" />

现在,content属性是一个不是从UIElement派生的字符串。所以简短的答案是肯定的,这不仅是可能的,而且可能会发生。