WPF:使用IMultiValueConverter更改进度条颜色
好的,我的视图模型中有以下属性:WPF:使用IMultiValueConverter更改进度条颜色,wpf,progress-bar,imultivalueconverter,Wpf,Progress Bar,Imultivalueconverter,好的,我的视图模型中有以下属性: public double Progress { get { return _progress; } set { _progress= value; OnPropertyChanged(); } } public bool IsChecked { get { return _isChecked; } set { _isChecked = value;
public double Progress
{
get { return _progress; }
set
{
_progress= value;
OnPropertyChanged();
}
}
public bool IsChecked
{
get { return _isChecked; }
set
{
_isChecked = value;
OnPropertyChanged();
}
}
正如您所看到的,这个工具INotifyPropertyChanged
这是我的进度条
:
<ProgressBar Name="progressBarColumn"
Minimum="0"
Maximum="100"
Value="{Binding Progress, UpdateSourceTrigger=PropertyChanged}"
Width="{Binding Path=Width, ElementName=ProgressCell}"
Style="{StaticResource CustomProgressBar2}"/>
所以这很好,我的进度条
颜色是蓝色
,并填充灰色
颜色
现在我想补充两件事,但不知道什么时候:
1.当我的进度条
达到100的值
时,我希望它背景
变成绿色
当我的属性被调用被选中时
为False
我希望我的背景
变成红色
在此之前,我有一个IMultiValueConverter
:
public class ProgressToPropgressBarBackgroundConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
// Do my stuff
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
问题是我不知道在哪里添加我的转换器以及如何添加
编辑:
您的逻辑非常简单,您可以避免使用转换器,只需在您的样式中使用触发器:
<Style.Triggers>
<DataTrigger Binding=“{Binding Progress}” Value=“100”>
<Setter Property=“Background” Value=“Green” />
</DataTrigger>
<DataTrigger Binding=“{Binding IsChecked}” Value=“True”>
<Setter Property=“Background” Value=“Red” />
</DataTrigger>
</Style.Triggers>
然后需要更新控件模板以正确地尊重控件的后台属性。您可以为此使用TemplateBinding:
<Border Name="PART_Track"
CornerRadius="0"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding Background}"
BorderThickness="1"/>
<Border Name="PART_Indicator"
CornerRadius="0"
Background="{TemplateBinding Foreground}"
BorderBrush="{TemplateBinding Foreground}"
BorderThickness="1"
HorizontalAlignment="Left" />
如果需要相同的蓝色和灰色默认颜色,请将它们添加到样式中:
<Setter Property=“Background” Value=“Blue”/>
<Setter Property=“Foreground” Value=“Gray”/>
您不需要转换器,您的样式中的DataTriggers将执行此操作请参见我的编辑,我添加了两个DataTriggers,但它们都不工作请参见我的编辑,根据您的编辑,除了值为100时,所有都工作正常,在这种情况下,颜色不会更改为黑色。看起来您的绑定是错误的,我想你可能想要{relativesourceself}。但是使用常规触发器(不是DataTrigger)或绑定到基础属性(如我的回答中所述)实际上更容易。我将其更改为,并尝试Value=“100.0”,因为这是一个带1个小数点的双精度,但我仍然看不到这个颜色,可能是try Value=“{x:double 100}”,否则,我会在视图模型中添加一个bool属性,并触发WPF中不支持的Double,我会在我的VM中添加一些值。
<Border Name="PART_Track"
CornerRadius="0"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding Background}"
BorderThickness="1"/>
<Border Name="PART_Indicator"
CornerRadius="0"
Background="{TemplateBinding Foreground}"
BorderBrush="{TemplateBinding Foreground}"
BorderThickness="1"
HorizontalAlignment="Left" />
<Setter Property=“Background” Value=“Blue”/>
<Setter Property=“Foreground” Value=“Gray”/>