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

时间:2013-01-20 09:38:37

标签: c# wpf wpf-controls

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

我想在WPF项目中更改活动标签的背景和前景(不是其内容,而是为了激活而选择的上半部分)但我是寻找C#代码。以下代码对我不起作用:

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

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

3 个答案:

答案 0 :(得分:4)

如果您使用WPF,请在XAML中执行此操作。

您可bind到TabControl的属性ItemsSource。不只是定义Styletrigger来更改背景

答案 1 :(得分: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>

此代码位于<Grid>的{​​{1}}标记的<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; } } 文件。

请注意:颜色仅供测试,不要因为选择的对比度差而判断我!

我不知道是否可以不使用其他课程。

答案 2 :(得分:0)

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

但您可以在活动标签更改上处理tabcontrol的状态,并设置已停用和已激活标签的背景。