WPF多按钮背景颜色改变
WPF multi-button backgroundcolor change
<Button Content="1" Background="{Binding HotNumbers, Converter={StaticResource BrushConverter} }"/>
<Button Content="2" Background="{Binding HotNumbers, Converter={StaticResource BrushConverter} }"/>
..
我有 10 个按钮。我正在尝试将每个背景颜色绑定到 ObservableCollection<bool>
。我尝试使用 IValueConverter
将布尔值转换为如下所示的画笔颜色。
但是整个集合似乎是在对象值中传递而不是单个项目在转换器中抛出异常。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value)
{
return Brushes.Red;
}
else
{
return Brushes.White;
}
}
有没有其他方法可以做到这一点,这样我就不必为每个按钮创建 10 个不同的属性。
为什么不像这样在 xaml 代码中简单地添加 ConverterParameter?
Background="{Binding HotNumbers, Converter={StaticResource BrushConverter}, ConverterParameter=1 } "
然后在您的转换器中,您使用对象参数来访问数组的特定布尔项,就像这样?
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value[(int)parameter])
{
return Brushes.Red;
}
else
{
return Brushes.White;
}
}
我认为它只适用于此:
<Button Content="1" Background="{Binding HotNumbers[0], Converter={StaticResource BrushConverter}}"/>
<Button Content="2" Background="{Binding HotNumbers[1], Converter={StaticResource BrushConverter}}"/>
<Button Content="1" Background="{Binding HotNumbers, Converter={StaticResource BrushConverter} }"/>
<Button Content="2" Background="{Binding HotNumbers, Converter={StaticResource BrushConverter} }"/>
..
我有 10 个按钮。我正在尝试将每个背景颜色绑定到 ObservableCollection<bool>
。我尝试使用 IValueConverter
将布尔值转换为如下所示的画笔颜色。
但是整个集合似乎是在对象值中传递而不是单个项目在转换器中抛出异常。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value)
{
return Brushes.Red;
}
else
{
return Brushes.White;
}
}
有没有其他方法可以做到这一点,这样我就不必为每个按钮创建 10 个不同的属性。
为什么不像这样在 xaml 代码中简单地添加 ConverterParameter?
Background="{Binding HotNumbers, Converter={StaticResource BrushConverter}, ConverterParameter=1 } "
然后在您的转换器中,您使用对象参数来访问数组的特定布尔项,就像这样?
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value[(int)parameter])
{
return Brushes.Red;
}
else
{
return Brushes.White;
}
}
我认为它只适用于此:
<Button Content="1" Background="{Binding HotNumbers[0], Converter={StaticResource BrushConverter}}"/>
<Button Content="2" Background="{Binding HotNumbers[1], Converter={StaticResource BrushConverter}}"/>