2014-01-12 7 views
0

이것은 호기심에 관한 질문이며, 값 비싼 레이아웃에는 실용적이지 않습니다.Tabcontrol - 선택 변경로드/언로드

나는 다음과 같은 XAML

<Window x:Class="WpfApplication16.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     WindowStartupLocation="CenterScreen"> 
    <TabControl ItemsSource="{Binding Items}"> 
     <TabControl.ContentTemplate> 
      <DataTemplate> 
       <ScrollViewer> 
        <ContentPresenter Content="{Binding View}" /> 
       </ScrollViewer> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 
</Window> 

하고 창 모든 텍스트 상자가 이미 구축 된 초기화 그래서 전에

public class Item 
    { 
     public FrameworkElement View { get { return m_view; } } 

     public Item() 
     { 
      for (int i = 0; i < 3000; ++i) 
      { 
       m_view.Items.Add(new TextBox()); 
      } 
     } 

     ItemsControl m_view = new ItemsControl(); 
    } 

    public partial class MainWindow : Window 
    { 
     public List<Item> Items { get; private set; } 

     public MainWindow() 
     { 
      Items = new List<Item>(); 
      for (int i = 0; i < 10; ++i) 
      { 
       Items.Add(new Item()); 
      } 

      DataContext = this; 
      InitializeComponent(); 
     } 
    } 

뒤에 다음 코드, 모두 3 만하지만, 천국이 아직로드되지 않았습니다. 초기 선택이 수행 될 때와 같이 선택이 변경 될 때만로드/언로드됩니다. 나는 각 항목에 대해 처음에는 텍스트 상자의 양 때문에 잠시 동안 탭을 변경하려고하지만, 각 탭을 선택한 후에는 다시로드/언로드하는 데 오랜 시간이 걸리는 이유는 무엇입니까?

바인딩이 진행되지 않으며 탭을 변경하는 것보다 훨씬 빠르게 창 크기를 조정할 때 레이아웃 문제가 발생하지 않는다고 생각합니다. 메모리 사용량이 탭을 선택하는 사이에 증가하고 10 개가 모두 선택되고 다시 실행되면 상수가 유지됨에 따라 메모리 문제가 발생하지 않는다고 생각합니다.

또한 저는 의도적으로 시각화를 사용하지 않습니다.

답변

1

이는 TabControl의 기본 동작이며 쉽게 변경할 수있는 방법이 아닙니다.

탭을 시각적으로 트리에서 언로드하면 비활성 상태가되어 메모리를 절약 한 다음 탭이 다시 활성화 될 때 다시로드합니다. 혹시이 문제가 발생 할 경우

, 당신은 두 가지 옵션이 있습니다이 복수의 광경에 블로그 게시물 없었다, 그러나 그들은 자신의 웹 사이트를 변경하고 더 이상 사용할 수

  1. . 그들은 기본적으로 TabControl을 서브 클래 싱하여이 동작을 변경하여 탭 내용을 캐시합니다. 나는 코드가 여기에 저장되어 있다고 생각한다. : WPF TabControl - Preventing Unload on Tab Change?

  2. 또 다른 옵션은 (이미 내 의견으로는) 이미 그것을하는 타사 컨트롤을 구입하는 것이다. DevExpress TabControl은 탭을 캐시하고 탭 사이를 전환 할 때 다시 그릴 필요가 없다고 생각합니다. http://documentation.devexpress.com/#wpf/CustomDocument7975