是否有ContentPresenter
的内容是UIElement
以外的某个对象的情况?鉴于该字段被声明为对象而不是UIElement
,似乎可能存在。但是,我想不出任何情况,或者即使它有效。
ContentPresenter presenter = GetTemplateChild(PART_Presenter) as ContentPresenter;
UIElement myElement = (UIElement)presenter.Content;
myElement.SomeUIMethod(); // possible InvalidOperationException?
答案 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
派生的字符串。所以简短的答案是肯定的,这不仅是可能的,而且可能会发生。