WPF ProgressBar控件模板如何绑定模板背景

时间:2014-11-03 16:15:52

标签: c# wpf binding controltemplate valueconverter

简单地说,我有一个充当电池指示器的进度条。

我想做一个非常小的模板覆盖。

电池的背景应根据电池电量范围而改变。

实际进度条绑定到我的viewmodel中名为BatteryLevel的整数值。

然后将其传递给Converter以返回背景。

问题是...... ControlTemplate中的绑定不会改变边框的背景颜色。

它实际上保持空白(可能为空......不确定)。

我的问题:能够将PART_Indicator绑定到ProgressBar背景

的必要条件

以下是我的代码以覆盖模板。

<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();
        }
    }

0 个答案:

没有答案