2010-08-03 3 views
0

스택 패널 내의 일련의 버튼으로 구성된 최상위 탐색 메뉴가있는 응용 프로그램이 있습니다. 사용자가 버튼을 클릭하면 뷰 모델이 명령을 처리하고 CurrentView (UserControl 유형)의 값을 업데이트합니다. CurrentView는 아래와 같이 ContentControl 요소에 바인딩됩니다. WPF : 네비게이션/디자인 : 상태를 추적하여 단추 모양을 바꿀 수있는 방법은 무엇입니까?

<ContentControl Content="{Binding CurrentView}" /> 

나는 그들이 어디에 사용자가 알 수 있도록 내가, 탐색 버튼의 전경을 변경할 수 있도록 사용자가 어디를 추적하기 위해 '메뉴를'원한다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이 '메뉴'를 컨트롤에 넣어야합니까?

ContentControl에 전달 된보기 중 일부에는 고유 한 하위 메뉴가 있습니다. 이 하위 메뉴는 같은 방식으로 작동하며 전경과 배경을 변경하고 싶습니다.

답변

1

여기에 나오는 대부분의 내용은 일반적으로 프레임 및 탐색 페이지를 사용하여 수행됩니다. 당신이 이것을 사용하지 않는 특별한 이유가 있습니까?

예를 들어

:

<sdk:Frame x:Name="CenterFrame" BorderThickness="0" Source="/Home"> 
<sdk:Frame.UriMapper> 
    <sdk:UriMapper> 
     <sdk:UriMapping Uri="/Job/{ID}" MappedUri="/Views/JobView.xaml?ID={ID}"/> 
     <sdk:UriMapping Uri="/Home" MappedUri="/Views/HomeView.xaml"/> 
     <sdk:UriMapping Uri="/Resource/{ResourceName}" MappedUri="/Views/ResourceView.xaml?Resource={ResourceName}"/> 
     <sdk:UriMapping Uri="/Tasks" MappedUri="/Views/TaskView.xaml"/> 
    </sdk:UriMapper> 
</sdk:Frame.UriMapper> 

그리고 다음 페이지에 : 당신이 컨트롤을 사용하여 페이지를 사용하고 싶어하지 않으려면

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     if (this.NavigationContext.QueryString.ContainsKey("Resource")) 
     { 
      ResourceViewModel rvm = ViewModelLocator.ResourceVMStatic; 
      if (rvm != null) 
       rvm.ResourceName = this.NavigationContext.QueryString["Resource"]; 
     } 
     base.OnNavigatedTo(e); 
    } 

, 당신은 할 수있다 하지만 추적을 수동으로 제공해야합니다. 네비게이션 용 뷰 모델을 사용하는 것이 좋습니다. 그러면 일부 데이터 자체가 유지 될 수 있습니다.

+0

ContentControl 대신 프레임을 사용하는 것이 좋습니다. 이러한 컨트롤을 페이지로 변환 할 수없는 이유는 없습니다. 내가 왜 컨트롤을 사용하도록 설정되었는지 모르겠습니다. – GoalMaker