4

OK、どこでも検索しましたが、問題にアクセスするすべてのリンクでxamlコードで説明されています。

WPF プロジェクトで、アクティブなタブの背景と前景 (コンテンツではなく、アクティブにするために選択した上部) を変更したいのですが、C# コードを探しています。以下のコードは私にとってはうまくいきません:

if (tabs[0].IsEnabled) tabs[0].Background = Brushes.Blue;

else tabs[0].Background = Brushes.Black;
4

3 に答える 3

4

WPF を使用する場合は、XAML で実行します。

TabControl のプロパティにバインドできますItemsSourceStyletriggerを定義してBackground を変更するだけではありません

于 2013-01-20T13:24:50.283 に答える
2

OK、Venson私はついにそれを手に入れました、そして誰かがそれがどのように機能するか知りたい場合に備えて:

<TabControl  ItemsSource="{Binding tabs}" Height="68" HorizontalAlignment="Left" Margin="156,23,0,0" Name="tabControl1" VerticalAlignment="Top" Width="268">
        <TabControl.ItemContainerStyle>
            <Style TargetType="TabItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabItem}">
                            <Grid>
                                <Border 
                                    Margin="0,0,-4,0" 
                                    Background="Black"
                                    BorderBrush="Blue" 
                                    BorderThickness="1,1,1,1" 
                                    CornerRadius="2,12,0,0" >
                                    <ContentPresenter x:Name="ContentSite"
                                      VerticalAlignment="Center"
                                      HorizontalAlignment="Center"
                                      ContentSource="Header"
                                      Margin="12,2,12,2"
                                      RecognizesAccessKey="True"/>
                                </Border>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="Foreground" Value="Blue"></Setter>
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type TabItem}">
                                    <Grid>
                                        <Border 
                                            Margin="0,0,-4,0" 
                                            Background="Green"
                                            BorderBrush="Blue" 
                                            BorderThickness="1,1,1,1" 
                                            CornerRadius="2,12,0,0" >
                                            <ContentPresenter x:Name="ContentSite"
                                              VerticalAlignment="Center"
                                              HorizontalAlignment="Center"
                                              ContentSource="Header"
                                              Margin="12,2,12,2"
                                              RecognizesAccessKey="True"/>
                                        </Border>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TabControl.ItemContainerStyle>
    </TabControl>

このコードは、<Grid>との<Window>タグの中にMainWindow.xamlあります

public MainWindow()
    {
    testClass testObject = new testClass();

    testObject.tabs = new List<TabItem>();

    testObject.tabs.Add(new TabItem());
    testObject.tabs.Add(new TabItem());

    testObject.tabs[0].Header = "NO WAY";
    testObject.tabs[1].Header = "ON WAY";

    testObject.tabs[0].Content = "WHAT";
    testObject.tabs[1].Content = "HELL";

    InitializeComponent();

    this.DataContext = testObject ;
}
class testClass
{
    public List<TabItem> tabs { set; get; }
}

これはMainWindow.xaml.csファイルに入ります。

注意:色はテスト専用です。選択したコントラストが悪いと判断しないでください。

ただし、別のクラスを使用しないことが可能かどうかはわかりません。

于 2013-01-20T23:06:35.827 に答える
0
foreach(var tab in tabs)
{
    tab.Background = tab.IsEnabled ? Brushes.Blue :Brushes.Black;
}

ただし、アクティブなタブの変更時にタブコントロールの状態を処理し、非アクティブ化およびアクティブ化されたタブの背景を設定できます。

于 2013-01-20T09:47:03.677 に答える