我有一个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;
}
由于
答案 0 :(得分:2)
只是看看你发布的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
}
答案 1 :(得分:1)
我认为您应该使用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>
答案 2 :(得分:1)
如果您要设置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,如前所述。 您必须将此样式应用于每个Label。省略x:键使其成为标签的默认样式
<Style x:Key="LabelForeGroundStyle" TargetType="{x:Type Label}">
<Setter Property="Foreground" Value="{Binding defColor}" />
</Style>