将标签前台绑定到一个变量
本文关键字:一个 变量 标签 前台 绑定 | 更新日期: 2023-09-27 18:18:53
我有一个User Interface
,我正在改变主网格的background
属性。现在有些人给一个非常愉快的外观,但有些人有困难阅读文本显示。然而,当我现在有大约20个标签时,出现了一个问题,每次更改它们并为它们分配颜色都会使我的代码看起来很难看。我知道一定有一个更优雅的设计。
我试图将标签绑定到颜色,但这不起作用。下面是代码
XAML:<Label Foreground="{Binding defColor}" Content="Settings" Height="44" HorizontalAlignment="Left" Margin="12,53,0,0" Name="label1" VerticalAlignment="Top" FontWeight="Normal" FontSize="26" />
背后的代码:
SolidColorBrush defColor = new SolidColorBrush();
public SettingsWindow()
{
InitializeComponent();
defColor.Color = Colors.Black;
//defColor.Color = Colors.Black; label1.Foreground = defColor;
}
private void button4_Click(object sender, RoutedEventArgs e)
{
defColor.Color = Colors.Black;
}
谢谢
就从你发布的c#代码来看,我认为你的第一个问题是你已经做了这个
SolidColorBrush defColor = new SolidColorBrush();
而不是
public SolidColoRBrush defColor { get; set; }
你只能绑定属性。
你的构造函数现在看起来像这样
public SettingsWindow()
{
InitializeComponent();
defColor = new SolidColorBrush(Colors.Black);
this.DataContext = this; // need to tell your window where to look for binding targets
}
如果你正在设置SettingsWindow, DataContext = this;那么SettingsWindow类必须实现INotifyPropertyChanged。让{Binding defColor}工作。你需要的代码:
public class SettingsWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public SettingsWindow()
{
// We are acting as our own 'ViewModel'
DataContext = this;
InitializeComponent();
}
private Color _defColor;
public Color defColor
{
get { return _defColor; }
set
{
if (_defColor != value)
{
_defColor = value;
if(null != PropertyChanged)
{
PropertyChanged(this, "defColor");
}
}
}
}
}
至于针对应用程序中的所有标签,正确的方法是使用Style,如前所述。您必须将此样式应用于每个标签。省略x:键使其成为标签
的默认样式 <Style x:Key="LabelForeGroundStyle" TargetType="{x:Type Label}">
<Setter Property="Foreground" Value="{Binding defColor}" />
</Style>
与其将每个标签绑定到相同的属性,我认为你应该使用style,并为每个标签应用此样式,例如:
<Style x:Key="LabelForeGroundStyle" TargetType="{x:Type Label}">
<Setter Property="Foreground" Value="{Binding defColor}" />
</Style>
或者更好,使用trigger:
<Style.Triggers>
<Trigger>
<Trigger Property="Background" Value="Blue">
<Setter Property="Foreground" Value="Green"/>
</Trigger>
</Trigger>
</Style.Triggers>