System.Windows.Controlsの紹介 - TabControl

今回は、WindowsフォームのTabControl(System.Windows.Forms名前空間)と比較するかたちで、WPFのTabControl(System.Windows.Controls名前空間)を紹介したいと思います。


WindowsフォームのTabControl
TabControlはTabPageをコレクションとして持っており、このTabPage1つ1つが実際のタブの部分になります。
TabPageクラスにもEnabledプロパティはあるのですが、MSDNライブラリを見ると「このコントロールでは、このメンバは無効です。 」と記載されています。

TabPage.Enabled Property (System.Windows.Forms) | Microsoft Docs

しかしながら、一方ではTabPageクラスEnabledプロパティを使用してタブを有効または無効にする方法が、下記のページにて紹介されています。

方法 : Windows フォーム TabControl の表示形式を変更する | Microsoft Docs



実際に左から2番目のタブのEnabledプロパティをFalseに設定した結果がこちらです。



タブ自体が無効になる(タブを選択できない)のではなく、そのタブ上に配置されたコントロールが無効になっているのが分かります。


TabPlus for .NET 2.0J
TabPlus for .NET 2.0Jで、同じく左から2番目のタブのEnabledプロパティをFalseに設定すると、このような結果となります。



タブそのものが無効となり、タブを選択できなくなっているのが分かるかと思います。
※TabPlus for .NET 1.0Jの場合、WindowsフォームのTabControlと同じ動作となります。


WPFのTabControl
WPFでは、TabPageではなくTabItemとなり、Enabledプロパティの代わりにIsEnabledプロパティを使用します。


XAML

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="TabControl - WPF" Height="150" Width="240"
    >
    <DockPanel>
        <TabControl>
            <TabItem Header="Tab1"/>
            <TabItem Header="Tab2" IsEnabled="False"/>
            <TabItem Header="Tab3"/>
        </TabControl>
    </DockPanel>
</Window>


結果はこのようになります。



TabPlus for .NET 2.0Jと同じように、タブそのものが無効となりタブを選択できなくなります。やはりこのような動作を望んでいた人が多かったということなんでしょうね。