1

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

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

2 回答 2

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.

于 2009-12-01T09:34:10.930 回答
4

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

<Label Content="My Label" />

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

于 2009-12-01T19:22:40.477 回答