如何更改 TabControl 中 TabPanel 的背景颜色?

How to change the background color of the TabPanel in a TabControl?

我知道如何在 xaml 中设置 TabPanel 的背景颜色,如下所示:

<TabControl.Resources>
    <Style x:Key="noClue" TargetType="{x:Type TabPanel}">
        <Setter Property="Background" Value="Transparent"></Setter>
    </Style>
</TabControl.Resources>

但是,我想在单击 WPF 应用程序上的按钮时更改此背景颜色,这意味着在 运行 时更改它。有办法吗?

提前感谢您的宝贵时间。

是的,您可以将 TabPanel 的背景 属性 绑定到 View/ViewModel 中的 属性 并在单击按钮时更改它。绑定的 XAML 看起来像这样使用:

<TabPanel Background="{Binding Path=BackgroundColor}"/>

您的 属性 名称是 BackgroundColor。背景是 Brush so take that into account when you manage your bindings. You can also achieve the binding from the style, but you may need a RelativeSource

在风格上,试试这个

<Setter Property="Background" Value="{Binding BackgroundColor}" />

如果您的 window 绑定到 DataContext。也可以尝试从您的样式中删除 x:Key。不需要。

编辑:这有效

风格

<Window.Resources>
    <Style TargetType="{x:Type TabPanel}">
        <Setter Property="Background" Value="{Binding BackgroundColor}"/>
    </Style>
</Window.Resources>

Window

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private SolidColorBrush backgroundColor = new SolidColorBrush(Colors.Black);

    public SolidColorBrush BackgroundColor
    {
        get { return backgroundColor; }
        set
        {
            if (backgroundColor == value)
                return;

            backgroundColor = value;
            RaisePropertyChanged(nameof(backgroundColor));
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        // Make sure to set the DataContext to this!
        DataContext = this;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Change the color through the property
        if (BackgroundColor.Color == Colors.Black)
            BackgroundColor = new SolidColorBrush(Colors.Transparent);
        else
            BackgroundColor = new SolidColorBrush(Colors.Black);
    }
}

This 绑定到 View,您可能希望将其抽象为 ViewModel 并绑定到 ViewModel。此外,如果您确实将此颜色逻辑移动到 ViewModel,您可能还想将 BackgroundColor 属性 中的 SolidColorBrush 更改为 Color 或其他一些 UI-Independent 类型,但它你决定。查看 this 和其他 WPF MVVM 相关文章,了解有关 MVVM 和绑定到 ViewModels 的更多信息