如何更改 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 的更多信息
我知道如何在 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 的更多信息