2014-10-31 1 views
3

나는 목록을 가져 와서 해당 목록의 각 요소에 대해 TabItem을 만드는 TabControl을 만들려고합니다. ItemsControl을 만든 다음 TabControl에 패널을 설정하면이 작업을 수행 할 수 있지만 작동하지 않는 것 같습니다. 어쨌든이 작업을 할 수 있습니까?ItemsControl 내에서 TabItem 사용

+0

[TabControl에 바인딩]의 예 (https://alala666888.wordpress.com/2010/04/26/how-to-bind-a-tabcontrol-in-wpf /) – kennyzx

+0

이게 당신이 찾고 있는게 있나요? http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol –

답변

6

ItemsControl이 필요하지 않습니다. 오히려 TabControl에는 ItemsSource 속성이 있습니다. 예를 들어 IEnumerable<string>으로 설정할 수 있으며 열거 형의 모든 항목에 대해 TabItem이 만들어집니다.

예를 들어, XAML에서 :

<TabControl ItemsSource="{Binding Items}"> 
</TabControl> 

을 그리고 항목이 List<string> { "a", "b", "c" }로 설정되어있는 경우,이이 생성됩니다 그러나 enter image description here

, 나는 당신의 주요 목표는 단지 ​​만들 아니 었 겠지 지정된 열거 형의 모든 단일 항목에 대한 빈 TabItem이므로 실제로 각 TabItem을 채우기 위해 TabControl의 ContentTemplate 속성을 사용하려고합니다.

<TabControl ItemsSource="{Binding Items}"> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock VerticalAlignment="Top" Text="{Binding YourText}"></TextBlock> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

ContentTemplate 속성은 ItemsSource의 지정된 항목에서 DataContext를 가져옵니다. 따라서 YourText를 속성으로 만들 수있는 자신 만의 ItemsSource 개체에서 항목을 만드는 것이 훨씬 쉽습니다. YourText 속성을 사용하여 자체 TestClass를 만들고 Items 속성을 두 TestClasses가 들어있는 IEnumerable로 변경했습니다. (첫 번째는 YourText = "첫 번째 탭", 두 번째 YourText = "두 번째 탭"을 가지고있다.) 이것은 TabControl에 지금 ItemsSource가 장소에 IEnumerable을하고 ItemsControl.ContentTemplate로 설정된 모습입니다 :

enter image description here

이것은 거의 기본적인 예제이며, ControlTemplate은 적절하게 확장 될 수 있습니다. 그러나 대부분의 경우 모든 컨트롤을 동일한 방식으로 사용할 수 있습니다. 일반적으로 Window에 배치합니다. 또는 TabItem.

헤더를 변경하여 형식 이름을 나타내지 않게하려면 위의 ControlTemplate 사용과 비슷한 방식으로 TabControl.ItemTemplate 속성을 사용하십시오. 당신이 더 많은 것을 알고 싶은 경우에

,이 링크를 제공 kennyzx : http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol

을 그리고 Panjak Nikam이 하나 제공 : http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol

+0

기본적으로 완벽한 답변입니다. 나는 실망했다. – Coat

+0

@ user2488335 좋아요! 밤을 끝내는 나를위한 확실히 좋은 감정. – furkle