2009-12-01 5 views
1

ContentPresenter의 콘텐츠가 UIElement 이외의 어떤 개체가 될 수 있습니까? 필드가 UIElement이 아니라 객체로 선언되면 주어진 가능성이있는 것으로 보입니다. 그러나 나는 어떤 상황이 될지, 심지어 그것이 유효 할지라도 생각할 수 없다. 나는거야,ContentPresenter.Content를 UIElement로 전송하는 것이 적절합니까?

UIElement에서 파생되지 않은 클래스를 만듭니다 -

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

두 번째 줄에는 InvalidCastException이 표시되고 세 번째 줄에는 InvalidOperationException이 표시됩니다. – Nir

답변

6

내가 그것을 모든 시간을 전체 MVVM 방법은 UIElement 비의 콘텐츠를 기반으로, 여기에 예입니다 이 예에서는 MyViewModelClass입니다.

창을 만들고 추가 코드

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

을 그리고 XAML에 일부 콘텐츠 컨트롤을 추가 할 다음과 같은 MyViewModelClass와

이제
<Button Content="{Binding}"/> 

당신이 ContentPresenter (Button 컨트롤 내부 템플릿)가 함유량.

또 다른 (어쩌면 더 많이) 예 ItemControl이다 -의는 예를 들어 ListBox 보자, 각 ListBoxItemItemsSource로 설정 목록에 어떤이었다 한 ContentPresenter 있습니다.

+0

감사합니다. – jeffora

4

여기에 이제 컨텐츠 속성이 UIElement에서 파생되지 않은 문자열 내가

<Label Content="My Label" /> 

생각할 수있는 가장 기본적인 예입니다. 따라서 짧은 대답은 예일뿐입니다. 그것은 가능할뿐만 아니라 일어날 가능성이 있습니다.

관련 문제