今まで使ったことなかったので、TabControlを使って見ることにした。
ただ使うだけじゃつまらないのでコレクションとバインドしてみたよ。
Personクラス
public class Person : INotifyPropertyChanged
{
#region Name
private string name;
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged("Name");
}
}
#endregion
#region Age
private int age;
public int Age
{
get { return age; }
set
{
age = value;
OnPropertyChanged("Age");
}
}
#endregion
#region INotifyPropertyChanged メンバ
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
これを、ObservableCollectionにつっこんでWindowのResourcesにPeopleという名前で登録する。
Peopleと言う名前でResourcesに登録
public partial class TabWindow : Window
{
public TabWindow()
{
InitializeComponent();
ObservableCollection<Person> people = new ObservableCollection<Person> {
new Person() { Name = "一郎", Age = 12 },
new Person() { Name = "二郎", Age = 13 },
new Person() { Name = "三郎", Age = 14 },
new Person() { Name = "四郎", Age = 15 },
};
this.Resources["People"] = people;
}
}
TabControl.ItemTemplateに登録したテンプレートがTab部分になる。TabControl.ContentTemplateがTabの中身になるらしい。
ということでXAMLに書いて見た。
Tabの部分に名前を表示して、中身に「一郎さん 12歳」とか出して見るようにした。
TabWindow.xaml
<Window x:Class="WpfTab.TabWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TabBinding" Height="300" Width="300">
<Grid>
<TabControl ItemsSource="{DynamicResource People}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="さん " />
<TextBlock Text="{Binding Path=Age}" />
<TextBlock Text="歳" />
</StackPanel>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
</Window>
これを実行すると下のような画面になる。
めでたしめでたし。