Multibindingconverter 在 C# WPF 应用程序中不改变颜色
Multibindingconverter not changing color in C# WPF app
在我的 WPF 应用程序中,我尝试根据该行中其他两个单元格的值更改一个数据网格单元格的颜色。
这是我的摘录 XML:
<DataGridTextColumn Header="Element1" Binding="{Binding Element1}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource MultiColorConverter}">
<MultiBinding.Bindings>
<Binding Path="StartDate" />
<Binding Path="EndDate" />
</MultiBinding.Bindings>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
这是我的转换器:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace LiveLogosStatus.Converter
{
class MultiColorConverter : IMultiValueConverter
{
public MultiColorConverter()
{
}
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
if(value[1] == null || value[0] == null)
{
return Brushes.Blue;
}
DateTime startDate = (DateTime)value[0];
DateTime endDate = (DateTime)value[1];
if (DateTime.Now >= startDate && DateTime.Now < endDate)
{
return Brushes.Yellow;
}
else
{
return Brushes.Red;
}
}
public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
我在调试时进行了检查,我的 Convert Method 触发了并且 returns 了正确的值。但是颜色在最终视图中没有改变。
编辑:即使从 SolidBrush 更改为静态 Brushes 类型,它仍然不起作用。我已经有 Brushes.Red 等,只有当它不起作用时才尝试过 SolidBrush。
好的,感谢@Clemens 让我走上正轨
出于某种原因,我的 Visual Studio 决定使用 System.Drawing;是正确的使用语句。不幸的是 System.Drawing。画笔存在并且似乎也 return 一个 SolidBrush。
添加后使用System.Windows.Media;并使用 System.Drawing 删除;一切都按预期工作。特别是如果 SolidBrush 是 WinForms 的一部分,我不明白为什么 VS 甚至会告诉我使用 System.Drawing.
在我的 WPF 应用程序中,我尝试根据该行中其他两个单元格的值更改一个数据网格单元格的颜色。
这是我的摘录 XML:
<DataGridTextColumn Header="Element1" Binding="{Binding Element1}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource MultiColorConverter}">
<MultiBinding.Bindings>
<Binding Path="StartDate" />
<Binding Path="EndDate" />
</MultiBinding.Bindings>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
这是我的转换器:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace LiveLogosStatus.Converter
{
class MultiColorConverter : IMultiValueConverter
{
public MultiColorConverter()
{
}
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
if(value[1] == null || value[0] == null)
{
return Brushes.Blue;
}
DateTime startDate = (DateTime)value[0];
DateTime endDate = (DateTime)value[1];
if (DateTime.Now >= startDate && DateTime.Now < endDate)
{
return Brushes.Yellow;
}
else
{
return Brushes.Red;
}
}
public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
我在调试时进行了检查,我的 Convert Method 触发了并且 returns 了正确的值。但是颜色在最终视图中没有改变。
编辑:即使从 SolidBrush 更改为静态 Brushes 类型,它仍然不起作用。我已经有 Brushes.Red 等,只有当它不起作用时才尝试过 SolidBrush。
好的,感谢@Clemens 让我走上正轨
出于某种原因,我的 Visual Studio 决定使用 System.Drawing;是正确的使用语句。不幸的是 System.Drawing。画笔存在并且似乎也 return 一个 SolidBrush。
添加后使用System.Windows.Media;并使用 System.Drawing 删除;一切都按预期工作。特别是如果 SolidBrush 是 WinForms 的一部分,我不明白为什么 VS 甚至会告诉我使用 System.Drawing.