C# WPF ProgressBar controltemplate如何绑定模板背景
简单地说,我有一个进度条作为电池指示器 我想做一个非常小的模板覆盖 电池的背景应根据电池电量范围而变化 实际进度条绑定到我的viewmodel中名为BatteryLevel的整数值 然后将其传递到转换器以返回背景 问题是…ControlTemplate中的绑定没有更改边框的背景颜色 它实际上保持空白,可能为空…不确定 我的问题:将PART_指示器绑定到ProgressBar的背景需要什么 这是我覆盖模板的代码C# WPF ProgressBar controltemplate如何绑定模板背景,c#,wpf,binding,controltemplate,valueconverter,C#,Wpf,Binding,Controltemplate,Valueconverter,简单地说,我有一个进度条作为电池指示器 我想做一个非常小的模板覆盖 电池的背景应根据电池电量范围而变化 实际进度条绑定到我的viewmodel中名为BatteryLevel的整数值 然后将其传递到转换器以返回背景 问题是…ControlTemplate中的绑定没有更改边框的背景颜色 它实际上保持空白,可能为空…不确定 我的问题:将PART_指示器绑定到ProgressBar的背景需要什么 这是我覆盖模板的代码 <ProgressBar Name="_batterystat" Backgro
<ProgressBar Name="_batterystat" Background="{Binding BatteryLevel, Converter={StaticResource BatteryLevelToColorConverter}}">
<ProgressBar.Template>
<ControlTemplate TargetType="{x:Type ProgressBar}">
<Grid>
<Border x:Name="PART_Track" Background="White" BorderBrush="{x:Null}" />
<Border HorizontalAlignment="Left" x:Name="PART_Indicator" Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" BorderBrush="{x:Null}" />
</Grid>
</ControlTemplate>
</ProgressBar.Template>
</ProgressBar>
和转换器:
public class BatteryLevelToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var battLevel = System.Convert.ToInt32(value);
if (battLevel <= GlobalsService.BatterLevelCriticalSetting)
return new SolidColorBrush(Colors.Red);
if (battLevel <= GlobalsService.BatterLevelLowSetting)
return new SolidColorBrush(Colors.Yellow);
return new SolidColorBrush(Colors.Blue);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
只是尝试了一个简单的演示,该模板工作良好。如果为ProgressBar的背景设置其他笔刷值,您将看到它可以工作。所以这只是将背景绑定到BatteryLevel的问题。你应该再检查一遍。国王-谢谢。你完全正确。像个白痴一样,我从不绑定VALUE属性。显然,如果我不设置这个值,我不会看到背景的变化。呃……你的评论让我明白了这一点。你想加上这个作为答案,我会接受吗?不,谢谢,我觉得这个答案太简单了,这只是一个小小的错误,简单得像一个打字错误:足够公平。再次感谢。