C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WPFでタブアイテムの有効/無効


(過去ログ 84 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■49933 / inTopicNo.1)  WPFでタブアイテムの有効/無効
  
□投稿者/ 金魚 (2回)-(2010/05/24(Mon) 14:52:00)

分類:[C#] 

Model-View-ViewModel デザイン パターンによる WPF アプリケーション
http://msdn.microsoft.com/ja-jp/magazine/dd419663.aspx

上記ページでダウンロードできるサンプルの、
タブアイテムに有効/無効動作をつけたいのですがどのようにすればいいでしょうか?

通常のTabItem要素なら、IsEnabledプロパティを切り替えれば有効/無効が切り替わる
のですが、下記のようにDataTemplateを使用している場合にはTabItem要素を使用していなかったので
対象のプロパティがわかりませんでした。

  <DataTemplate x:Key="ClosableTabItemTemplate">
    <DockPanel Width="120">
        <TextBlock
            Text="{Binding Path=DisplayName}" 
            VerticalAlignment="Center" 
            Foreground="Red"
        />
        <Button 
            Command="{Binding Path=CloseCommand}"
            Content="X"
            Cursor="Hand"
            DockPanel.Dock="Right"
            Focusable="False"
            FontFamily="Courier" 
            FontSize="9"
            FontWeight="Bold"  
            Margin="0,1,0,0"
            Padding="0"
            VerticalContentAlignment="Bottom"
            Width="16" Height="16" 
        />
    </DockPanel>
  </DataTemplate>

たぶん上記部分を、どうにか変更すればタブ事態の有効/無効が行えるのかなと思っていますが
どうぞよろしくお願いいたします。

引用返信 編集キー/
■49936 / inTopicNo.2)  Re[1]: WPFでタブアイテムの有効/無効
□投稿者/ Hongliang (633回)-(2010/05/24(Mon) 16:44:10)
一応念のために確認ですが、TabItem.IsEnabled を切り替えたいってことでいいですよね?

TabControl.ItemTemplate は各 TabItem のコンテンツ(中身)のテンプレートであり、TabItem(ガワ)ではありません。
各 TabItem は TabControl.ItemContainerStyle プロパティ経由で Style を操作することになります。
一般的には、ItemsSource の各要素となっているオブジェクトに bool 型の通知可能な(NotifyPropertyChanged を発生させるような)プロパティを用意し、Style の Setter で TabItem の IsEnabled とそのプロパティをバインディングするでしょう。
引用返信 編集キー/
■49938 / inTopicNo.3)  Re[2]: WPFでタブアイテムの有効/無効
□投稿者/ 金魚 (3回)-(2010/05/24(Mon) 17:00:33)
2010/05/24(Mon) 17:03:42 編集(投稿者)
>>Hongliang さん
おお、ありがとうございました!
ItemContainerStyleにスタイルを定義してIsEnabledにデータをバインドしたら思っている動作になりました!
ItemTemplate がタブアイテムの中身で ItemContainerStyle がタブアイテムのスタイルなんですね、何となく理解できました。
ItemsSource はタブのコンテンツ部分かな?

以下、変更点
===================================
        <TabControl 
            IsSynchronizedWithCurrentItem="True" 
            ItemsSource="{Binding}" 
            ItemTemplate="{StaticResource TabItemTemplate}"
        />
↓
        <TabControl 
            IsSynchronizedWithCurrentItem="True" 
            ItemsSource="{Binding}" 
            ItemTemplate="{StaticResource TabItemTemplate}"
            ItemContainerStyle="{StaticResource TabItemStyle}"
        />

追加
    <Style x:Key="TabItemStyle" TargetType="TabItem">
        <Setter Property="IsEnabled" Value="{Binding Enabled}" />
    </Style>
===================================

Xamlむずかしいです、精進して頑張ります。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -