Подтвердить что ты не робот

Цвет переднего плана Progressbar

Кто-нибудь знает, как изменить цвет переднего плана WPF-Progressbar. Кажется, что он всегда сливается с зеленым.

4b9b3361

Ответ 1

К сожалению, он жестко закодирован в стиле по умолчанию:

<Trigger Property="IsIndeterminate"
     Value="false">
<Setter TargetName="Animation"
    Property="Background"
    Value="#80B5FFA9"/>

Вы можете создать свой собственный стиль из оригинального XAML или попробовать переопределить фон в событии Loaded, например:

private void ProgressBar_Loaded(object sender, RoutedEventArgs e)
{
    var p = (ProgressBar)sender;
    p.ApplyTemplate();

    ((Panel)p.Template.FindName("Animation", p)).Background = Brushes.Red;
}

но он ненадежный

Ответ 2

просто попробуйте с этим

   <ProgressBar Height="25" IsIndeterminate="True" Width="150" Foreground="Red" ></ProgressBar>

Если он не работает так, как вам нужно, вам нужно изменить стиль или контрольную таблицу Progressbar.

Для этого вы можете использовать Expression Blend от Microsoft или получить копию существующего шаблона и изменить его.

Ответ 3

Почему бы не пойти по пути низкого сопротивления и использовать популярную библиотеку MahApps?

  • Получить библиотеку MahApps: https://www.nuget.org/packages/MahApps.Metro
  • Настройка пространства имен: xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"

  • Добавьте 'MetroProgressBar'

                    <controls:MetroProgressBar Height="40"
                                           Background="{StaticResource GrayBrush2}"
                                           BorderBrush="{StaticResource GrayBrush8}"
                                           BorderThickness="3"
                                           Foreground="{StaticResource GrayBrush8}"
                                           IsIndeterminate="False"
                                           Value="{Binding CurrentProgressInfo.ProgressPercent}" />
    
  • Установите "Foreground" в ваш любимый цвет

Ответ 4

Я столкнулся с подобной проблемой, когда визуальные настройки Windows были оптимизированы для лучшей производительности (Панель управления → Система → Расширенные настройки системы → Дополнительно → Производительность → Настройки → Визуальные эффекты → Настройка для лучшей производительности), Индикатор выполнения выглядел нормально при нормальных настройках, но ужасно под "лучшей производительностью". Я просто изменил ForeGround на "LightGreen".

Вот что я увидел по умолчанию ForeColor в нормальных условиях

enter image description here

Вот что я увидел, когда настроен на лучшую производительность

enter image description here

Вот изменение

//before
<ProgressBar Name="Progress" Grid.Column="0" Value="{Binding ProgressValue}" HorizontalAlignment="Stretch"/>

//after
<ProgressBar Foreground="LightGreen" Name="Progress" Grid.Column="0" Value="{Binding ProgressValue}" HorizontalAlignment="Stretch"/>

Вот то, что я увидел после того, как настроено на лучшую производительность

enter image description here

Дополнительная информация: http://justmycode.blogspot.com.au/2012/08/the-case-of-strangely-coloured.html

Ответ 5

Марат Хасанов отметил, что нежелательный зеленый оттенок происходит от объекта под названием "Анимация" в шаблоне управления. Таким образом, еще один простой подход - скрыть этот объект. Это также отключит анимированный эффект "свечения", который я считаю активом, но вы можете видеть его как убийцу сделки. Я реализовал это через обработчик события Loaded, как показано ниже.

Это было вдохновлено ответом на другой вопрос. Такая же оговорка применяется: если они меняют шаблон управления, это может больше не работать.

    public void ProgressBar_Loaded(object sender, RoutedEventArgs e)
    {
        var progressBar = sender as ProgressBar;
        if (progressBar == null) return;

        var animation = progressBar.Template.FindName("Animation", progressBar) as FrameworkElement;
        if (animation != null)
            animation.Visibility = Visibility.Collapsed;

    }

Ответ 6

Мне было довольно полезно переопределить весь стиль. Вы можете потянуть стили шаблона управления любого элемента управления с помощью

var yourcontrol = new ProgressBar();
// the control needs to load before it has a template.
yourcontrol.Loaded += (sender,e) => {
    var str = new System.Text.StringBuilder();
    using (var writer = new System.IO.StringWriter(str))
        System.Windows.Markup.XamlWriter.Save(yourcontrol .Template, writer);
    System.Diagnostics.Debug.Write(str);
};
// add it to your main grid, or some control thats loaded on screen.
gridMain.Children.Add(yourcontrol);

Стиль выполнения (с некоторым форматированием) выводится следующим образом:

<ControlTemplate x:Key="templateprogress"
                     TargetType="ProgressBar">
        <Grid Name="TemplateRoot"
              SnapsToDevicePixels="True">
            <Grid.Resources>

                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1"
                                     x:Key="brushMagic1">
                    <GradientStop Color="#50FFFFFF"
                                  Offset="0.5385" />
                    <GradientStop Color="#00FFFFFF"
                                  Offset="0.5385" />
                </LinearGradientBrush>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1"
                                     x:Key="brushMagic2">
                    <GradientStop Color="#80FFFFFF"
                                  Offset="0.05" />
                    <GradientStop Color="#00FFFFFF"
                                  Offset="0.25" />
                </LinearGradientBrush>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="1,0"
                                     x:Key="brushGlowRect">
                    <GradientStop Color="#00FFFFFF"
                                  Offset="0" />
                    <GradientStop Color="#60FFFFFF"
                                  Offset="0.4" />
                    <GradientStop Color="#60FFFFFF"
                                  Offset="0.6" />
                    <GradientStop Color="#00FFFFFF"
                                  Offset="1" />
                </LinearGradientBrush>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="1,0"
                                     x:Key="brushLeftDark">
                    <GradientStop Color="#0C000000"
                                  Offset="0" />
                    <GradientStop Color="#20000000"
                                  Offset="0.3" />
                    <GradientStop Color="#00000000"
                                  Offset="1" />
                </LinearGradientBrush>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="1,0"
                                     x:Key="brushRightDark">
                    <GradientStop Color="#00000000"
                                  Offset="0" />
                    <GradientStop Color="#20000000"
                                  Offset="0.7" />
                    <GradientStop Color="#0C000000"
                                  Offset="1" />
                </LinearGradientBrush>
                <RadialGradientBrush RadiusX="1"
                                     RadiusY="1"
                                     x:Key="brushRadialLeftLight"
                                     RelativeTransform="1,0,0,1,0.5,0.5">
                    <GradientStop Color="#60FFFFC4"
                                  Offset="0" />
                    <GradientStop Color="#00FFFFC4"
                                  Offset="1" />
                </RadialGradientBrush>
                <LinearGradientBrush StartPoint="0,1"
                                     EndPoint="0,0"
                                     x:Key="brushCenterLight">
                    <GradientStop Color="#60FFFFC4"
                                  Offset="0" />
                    <GradientStop Color="#00FFFFC4"
                                  Offset="1" />
                </LinearGradientBrush>
                <RadialGradientBrush RadiusX="1"
                                     RadiusY="1"
                                     x:Key="brushRadial1"
                                     RelativeTransform="1,0,0,1,-0.5,0.5">
                    <GradientStop Color="#60FFFFC4"
                                  Offset="0" />
                    <GradientStop Color="#00FFFFC4"
                                  Offset="1" />
                </RadialGradientBrush>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1"
                                     x:Key="brushHighlight1">
                    <GradientStop Color="#90FFFFFF"
                                  Offset="0.5385" />
                    <GradientStop Color="#00FFFFFF"
                                  Offset="0.5385" />
                </LinearGradientBrush>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1"
                                     x:Key="brushHighlight2">
                    <GradientStop Color="#80FFFFFF"
                                  Offset="0.05" />
                    <GradientStop Color="#00FFFFFF"
                                  Offset="0.25" />
                </LinearGradientBrush>
            </Grid.Resources>
            <Rectangle RadiusX="2"
                       RadiusY="2"
                       Fill="{TemplateBinding Panel.Background}" />
            <Border CornerRadius="2,2,2,2"
                    Margin="1,1,1,1"
                    Background="{StaticResource ResourceKey=brushMagic1}" />
            <Border BorderThickness="1,0,1,1"
                    BorderBrush="#80FFFFFF"
                    Margin="1,1,1,1"
                    Background="{StaticResource ResourceKey=brushMagic2}" />
            <Rectangle Name="PART_Track"
                       Margin="1,1,1,1" />
            <Decorator Name="PART_Indicator"
                       Margin="1,1,1,1"
                       HorizontalAlignment="Left">
                <Grid Name="Foreground">
                    <Rectangle Fill="{TemplateBinding TextElement.Foreground}"
                               Name="Indicator" />
                    <Grid Name="Animation"
                          ClipToBounds="True">
                        <Rectangle Name="PART_GlowRect"
                                   Width="100"
                                   Margin="-100,0,0,0"
                                   HorizontalAlignment="Left"
                                   Fill="{StaticResource ResourceKey=brushGlowRect}" />
                    </Grid>
                    <Grid Name="Overlay">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition MaxWidth="15" />
                            <ColumnDefinition Width="0.1*" />
                            <ColumnDefinition MaxWidth="15" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Rectangle RadiusX="1"
                                   RadiusY="1"
                                   Name="LeftDark"
                                   Margin="1,1,0,1"
                                   Grid.RowSpan="2"
                                   Fill="{StaticResource ResourceKey=brushLeftDark}" />
                        <Rectangle RadiusX="1"
                                   RadiusY="1"
                                   Name="RightDark"
                                   Margin="0,1,1,1"
                                   Grid.Column="2"
                                   Grid.RowSpan="2"
                                   Fill="{StaticResource ResourceKey=brushRightDark}" />
                        <Rectangle Name="LeftLight"
                                   Grid.Column="0"
                                   Grid.Row="2"
                                   Fill="{StaticResource ResourceKey=brushRadialLeftLight}" />
                        <Rectangle Name="CenterLight"
                                   Grid.Column="1"
                                   Grid.Row="2"
                                   Fill="{StaticResource ResourceKey=brushCenterLight}" />
                        <Rectangle Name="RightLight"
                                   Grid.Column="2"
                                   Grid.Row="2"
                                   Fill="{StaticResource ResourceKey=brushRadial1}" />
                        <Border Name="Highlight1"
                                Grid.ColumnSpan="3"
                                Grid.RowSpan="2"
                                Background="{StaticResource ResourceKey=brushHighlight1}" />
                        <Border Name="Highlight2"
                                Grid.ColumnSpan="3"
                                Grid.RowSpan="2"
                                Background="{StaticResource ResourceKey=brushHighlight2}" />
                    </Grid>
                </Grid>
            </Decorator>
            <Border BorderThickness="{TemplateBinding Border.BorderThickness}"
                    CornerRadius="2,2,2,2"
                    BorderBrush="{TemplateBinding Border.BorderBrush}" />
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="ProgressBar.Orientation"
                     Value="Vertical">
                <Setter Property="FrameworkElement.LayoutTransform"
                        TargetName="TemplateRoot">
                    <Setter.Value>
                        <RotateTransform Angle="-90" />
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="ProgressBar.IsIndeterminate"
                     Value="True">
                <Setter Property="UIElement.Visibility"
                        TargetName="LeftDark"
                        Value="Collapsed" />
                <Setter Property="UIElement.Visibility"
                        TargetName="RightDark"
                        Value="Collapsed" />
                <Setter Property="UIElement.Visibility"
                        TargetName="LeftLight"
                        Value="Collapsed" />
                <Setter Property="UIElement.Visibility"
                        TargetName="CenterLight"
                        Value="Collapsed" />

                <Setter Property="UIElement.Visibility"
                        TargetName="RightLight"
                        Value="Collapsed" />
                <Setter Property="UIElement.Visibility"
                        TargetName="Indicator"
                        Value="Collapsed" />
            </Trigger>
            <Trigger Property="ProgressBar.IsIndeterminate"
                     Value="False">
                <Setter Property="Panel.Background"
                        TargetName="Animation"
                        Value="#80B5FFA9" />
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
    <Style TargetType="ProgressBar">
        <Setter Property="Template"
                Value="{StaticResource ResourceKey=templateprogress}" />
    </Style>

Ответ 7

Используйте стиль и настройте согласно вашему требованию

                                                                                                                 

                        </Border>

                    </DockPanel>
                </Border>
                    <Border Background="White" Margin="40,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
                    <Border Background="White" Margin="80,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
                    <Border Background="White" Margin="120,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
                    <Border Background="White" Margin="160,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
                </Grid>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>