문제

WPF의 Prism 2.0에서 작업하는 매우 간단한 시나리오를 얻는 데 어려움이 있습니다. 나는 내 신청서의 주요 작업장이 TabControl. 보기를 추가 할 때마다, 나는 그것이 TabItemTabControl.

쉽게 들리나요?

내 쉘에있는 우리 지역은 다음과 같습니다.

<Controls:TabControl 
    Name="MainRegion" 
    cal:RegionManager.RegionName="{x:Static Infrastructure:RegionNames.TabRegion}"
    ItemContainerStyle="{StaticResource ShellTabItemStyle}" />

스타일 : ShellTabItemStyle 이렇게 보인다 :

<Style x:Key="ShellTabItemStyle" TargetType="{x:Type TabItem}">
    <Setter Property="Header" Value="{Binding Content.DataContext.HeaderInfo, RelativeSource={RelativeSource Self}}" />
</Style>

이것은 설정해야합니다 HeaderTabItem ~로 HeaderInfo 에 속성 DataContext 견해의. (이 아이디어를 얻었습니다 이 기사) DataContext 내 견해는 매우 간단합니다 Presenter 여기에는 HeaderInfo 그것의 속성 :

public string HeaderInfo = "The Header Text";

내 견해는 간단한 WPF UserControl이며 다음과 같습니다.

  <StackPanel>
    <TextBox Text="Hello World" Name="MyTextBox"></TextBox>
    <Image Source="..SomeImage.PNG" Name="MyImage"></Image>
  </StackPanel>

여태까지는 그런대로 잘됐다. 영역에 뷰를 추가하면 탭 컨트롤이 표시되고 텍스트가 "헤더 텍스트"로 설정된 탭이 나타납니다. 내 문제는 탭에 컨텐츠가 나타나지 않는다는 것입니다. 내 견해에는 간단한 것이 포함되어 있습니다 Image 그리고 a TextBox, 그러나 그들 중 어느 것도 나타나지 않습니다 TabItem. 내가 스누프를 꺼내 주위를 둘러 보면 이미지가 보이지 않습니다.

내가 여기서 무엇을 놓치고 있습니까? 더 쉬운 방법이 있습니까?

도움이 되었습니까?

해결책

나는 일에 대한 제안 된 답을 얻을 수 없었습니다. 광범위한 인터넷 검색도 도움이되지 않았습니다. 나는 주말 동안 어떤 생각을했고 더 많은 생각을했고, 그것에 대해 생각 했을수록, 약간의 코드 냄새 이 접근법에 대해. 탭 영역에 뷰를 주입하십시오 ... 일부 마법의 물건이 발생하고 탭이 추가됩니다 ... 어딘가에 파일에 저장된 XAML 스타일링에 imcomprenable 동적 바인딩을 추가해야하며 헤더 텍스트를 설정하거나 설정하지 않을 수도 있습니다. . 이것의 단일 요소가 약간 잘못되면 오류가 발생하지 않지만 작동하지 않습니다.

내 견해로는, 이것은 부서지기 쉬운 (즉, 매우 쉽게 파손되기 쉽다), 당신이 깊은 이해 프리즘, 모델 및 XAML이 없다면, 꽤 비해 불가능합니다. 다행히도이 작업을 수행하는 훨씬 더 좋고 간단한 방법이 있습니다.

단순히라는 뷰를 만듭니다 TabregionView 빈 탭 콘트롤 만 포함합니다. 아마도 이것을 shell.xaml에 추가하고 싶을 것입니다. 불리는 이벤트를 만듭니다 InjectTabview Usercontrol 유형의 페이로드가 있으며이 이벤트를 구독합니다. TabregionView 제어. 이벤트가 시작될 때 TabregionView, 당신은 tabitem을 수동으로 만들고 다음과 같은 탭에보기를 추가합니다.

public void TabAdded(UserControl view)
{
    var item = new TabItem();
    item.Content = view;
    item.IsSelected = true;
    item.Header = "Header Text";
    mainTab.Items.Add(item);
}

새 탭으로보기를 표시하려면 코드가 다음과 같습니다.

    var view = new View(params);
    _eventAggregator.GetEvent<InjectTabViewEvent>()
        .Publish(view);

이것은 픽업 될 것입니다 TabregionView 보기는 새 탭으로 추가됩니다. 헤더 텍스트가 포함 된 일부 유형의 하네스, 이미지 및 bool을 포함하는 일부 유형의 조회수를 쉽게 랩핑하여 탭이 자동으로 선출되어야하는지 여부를 나타냅니다.

IMHO이 기술은 진행 상황을 직접 제어 할 수있는 이중 장점이 있으며 따라 가기가 훨씬 쉽습니다.

나는 모든 프리즘 공무원들로부터 이것에 대한 의견을 얻는 데 매우 관심이 있습니다.

다른 팁

RegionManager를 사용하는 경우보기를 활성화해야합니다. 이 지역에보기를 추가하는 코드가있을 수 있습니다. 해당 지역에 활성화를 위해 해당 지역을 알려야합니다.

public void AddViewToRegion(IRegion region, object view)
{
     region.Add(view);
     region.Activate(view);
}

어리석은 것처럼 보이지만, 당신이 이것을하지 않으면 당신이보고있는 행동을 얻습니다. 나는 이런 종류의 실망을 발견했지만 고치기에 충분히 쉬웠다. 최소한 첫 번째보기를 활성화하지 않으면 여러 탭을 추가 할 때 동작이 낯선 사람입니다.

내 이해는 당신이 이것을하지 않으면, 뷰는 시각적 트리의 일부가되지 않는다는 것입니다 (이것은 탭이 "in in"이 아닐 때 Tabcontrol이 비활성화 (시각적 트리에서 제거)가 비활성화된다는 사실의 부작용입니다. Front ". 이것은 특정 작업에 적합하지만 이와 같은 것들을 약간 원조합니다.

임의의 생각 :

  • TabControl에서 스타일을 제거하십시오
  • 도움을받은 시각적 트리를 확인하십시오 탐정 도구. TabControl 아래에서 View의 USERCONTROL을 사용하여 Tabitem을 볼 수 있습니다. 다음으로 UserControl과 그 어린이 (귀하의 견해 내용)에 무엇이 잘못되었는지 확인할 수 있습니다. 그들은 아마도 어떤 이유로 숨겨져있을 것입니다.
  • 생각해야 할 다른 것 - 지역 사도터. 지역 사양은 UIControl 호스트에 대한 지역의 견해를 조정할 책임이 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top