在C#和XAML中更改活动选项卡的背景

4

好的,我已经到处搜索了,每个链接中都有我的问题被用xaml代码解释。

我想在WPF项目中更改活动选项卡的背景和前景颜色(而不是它的内容,而是您选择以激活的上部分),但我正在寻找C#代码。下面的代码对我不起作用:

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

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

@Venson 因为“tabs”是一个List<>,并且它不在xaml代码中。 - Bonnev
1
你可以将数据绑定到TabControl的属性ItemsSource,然后定义一个Styletrigger来更改背景。 - Venson
我会进行一些研究,并查阅一些“绑定”的示例,非常感谢! - Bonnev
已添加为答案以供接受 - Venson
3个回答

4
如果你正在使用WPF,建议使用XAML来完成。你可以绑定TabControl的属性ItemsSource,然后定义一个Styletrigger以更改背景。

2

好的,多亏了 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>

这段代码应该放在MainWindow.xaml文件中 <Window>标签内的<Grid>标签中。
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文件中。

请注意:颜色只是用于测试,不要因为选择的差劲对我进行评判!

我不知道是否有可能不使用另一个类来实现这个功能。


如果你真的想使用WPF,你应该了解一下MVVM(Model-View-ViewModel),因为这是可能的;-)。如有疑问,请随时提问。 - Venson

0
foreach(var tab in tabs)
{
    tab.Background = tab.IsEnabled ? Brushes.Blue :Brushes.Black;
}

但是您可以处理选项卡控件的状态,以及设置非活动和活动选项卡的背景。


你的例子不太行,选项卡在非活动状态下会变成蓝色,但在活动状态下仍然是白色。 - Bonnev
它怎么会是白色的?我设置了蓝色或黑色。你在哪里调用这段代码? - Hamlet Hakobyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接