2013-06-13 12 views
1

멋진 앱에서 영감을 얻어 PanoramaItem의 표준 너비보다 넓은 PanoramaItem을 내 Panorama에 갖고 싶습니다.Caliburn Micro를 사용하여 다양한 항목으로 동적으로 바인딩 된 파노라마 페이지를 만드는 방법은 무엇입니까?

LinkedIn의 응용 프로그램에 타일 항목을 참조하십시오 : 일반적으로이 미리 정의 된 폭의 PanoramaItem을 추가하여 XAML에서 달성

enter image description here

:

<controls:PanoramaItem Width="555"> 

을하지만, 나는 싶습니다 응용 프로그램이 Caliburn-Micro를 기반으로하고 Panorama 컨트롤이 편리한 Caliburn 규칙을 사용하여 데이터 바인딩되므로이 방식으로 UI를 하드 코딩하지 마십시오. 그 뒤에있는 뷰 모델은 지휘자 (Conductor)이며 페이지가 그 안에 삽입됩니다. Panorama 컨트롤은 뷰 모델의 Items 속성에 바인딩됩니다.

내 문제는 항목 또는 화면 중 하나가 파노라마 항목의 표준 너비보다 넓 으면 잘리는 현상입니다.

내가 지정 ItemTemplate을하여 해결을 시도 :

<controls:Panorama.ItemTemplate> 
    <DataTemplate> 
     <ContentControl cal:View.Model="{Binding}"/> 
    </DataTemplate> 
</controls:Panorama.ItemTemplate> 

을하지만 그 일을 변경하지 않았다.

어떻게이 문제를 해결할 수 있습니까?

답변

2

음, 질문은 분명히 할 수 없다는 것입니다. 내 동적으로 바인딩 된 컨트롤 (ContentControl)의 부모를 찾는 OnViewAttached을 무시하려고 시도했지만 부모를 검색 할 수 없었습니다 (PanoramaItem 내가 더 넓게 만들고 싶었습니다).

그래서 나는 다음과 같은 솔루션에 정착 많은 시험 종료 오류 후 : 그들은 또한 뷰 모델에 주입하고의 컬렉션에 추가됩니다

<controls:PanoramaItem Header="item1"> 
    <ContentControl x:Name="Control1"/> 
</controls:PanoramaItem> 
<controls:PanoramaItem Header="Wide Item" Width="700" Orientation="Horizontal"> 
    <ContentControl x:Name="WideControl"/> 
</controls:PanoramaItem> 

: 내가 XAML에서 명시 적으로 내 파노라마 항목을 정의

Items, Caliburn의 Cunductor에서 상속되었습니다. ,

<controls:Panorama Name="MainPanorama" 
    cal:Message.Attach="[Event SelectionChanged] = 
    [Action MainPanorama_OnSelectionChanged($eventArgs)]" 
    SelectedIndex="{Binding ActivePage, Mode=TwoWay}"> 

나는 또한 뷰 모델이 SelectionChanged 이벤트를 수신하는지 확인하십시오

그런 다음 나는 ViewModel에 현재 선택한 항목을 인식하고 있어야합니다, 그래서 관련보기는 CaliburnMicro에 의해 활성화 될 수있다 그래서 그것은 현재 보이는 아이템을 활성화 할 때를 안다.

그리고 뷰 모델에서 모든 작업을하게 마지막 트릭 :

public void MainPanorama_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ActivateItem(Items[ActivePage]); 
}