我已“成功”将Background
绑定到string
,除了颜色不变。单击button
确实会按预期更改颜色(string
),但显示的颜色相同。
XAML:
Background="{Binding Color, Converter={StaticResource StringToColor}}"
转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (Color)ColorConverter.ConvertFromString(value.ToString());
}
。cs:
private void CheckBoxDrkChanged(object sender, RoutedEventArgs e)
{
if (_viewModel.IsDarkModeOn == true) _viewModel.Color = "Black";
if (_viewModel.IsDarkModeOn == false) _viewModel.Color = "White";
Debug.WriteLine(_viewModel.IsDarkModeOn);
Debug.WriteLine(_viewModel.Color);
e.Handled = true;
}
_viewModel.Color
在构造函数的开始处也设置为"White"
,否则应用程序会因为没有颜色而崩溃。
INotifyPropertyChanged
已实现。
编辑
确定,所以您说将string
更改为Brush
。由于仅是代码,因此可能会起作用。但是创建新的Brush
并非易事。我到目前为止尝试过的。
_viewModel.Color = new Brush("White");
Cannot create instance of abstract class.
_viewModel.Color = new SolidBrush(new Color("White"));
Color does not contain a constructor that takes 1 arguments.
编辑
这似乎有效。
_viewModel.Color = new SolidBrush(Color.FromName("White"));
需要进一步测试。
编辑
不起作用。绑定错误。我想我现在将回到string
并创建适当的转换器。
编辑
现在可以了。解决。
您正在将字符串投射为一种颜色,但背景需要使用画笔。 See