gpt4 book ai didi

wpf - 带有动态文本和文本颜色更新的进度条

转载 作者:行者123 更新时间:2023-12-03 09:17:58 25 4
gpt4 key购买 nike

我有一个进度条,其文本会动态变化。我想更新它的外观,以便一旦文本出现进度,文本颜色就会更新。像这样的东西。 enter image description here

我需要出现在蓝色背景上方的文本(黑色)的文本颜色应该自动变为白色。但是,具有白色背景的文本应保持黑色。

最佳答案

这是使用 ProgressBars 的修改版本的一种方法。默认 Template .它包含两个 TextBlocks

  • 第一个TextBlock是黑色的
  • 第二个TextBlock是白色的。这个TextBlock具有完全控制的宽度和 Clip设置为进度部分的宽度

  • enter image description here
    ProgressBar 的正文绑定(bind)到 Tag属性(property)。可以这样使用。
    <ProgressBar TextBlock.FontWeight="Bold"
    Tag="ProgressBar Text"
    Foreground="Blue"
    Style="{DynamicResource MyProgressBarStyle}"/>

    我的进度条样式
    <LinearGradientBrush x:Key="ProgressBarBackground" EndPoint="1,0" StartPoint="0,0">
    <GradientStop Color="#BABABA" Offset="0"/>
    <GradientStop Color="#C7C7C7" Offset="0.5"/>
    <GradientStop Color="#BABABA" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarBorderBrush" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#B2B2B2" Offset="0"/>
    <GradientStop Color="#8C8C8C" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarGlassyHighlight" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#50FFFFFF" Offset="0.5385"/>
    <GradientStop Color="#00FFFFFF" Offset="0.5385"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarTopHighlight" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#80FFFFFF" Offset="0.05"/>
    <GradientStop Color="#00FFFFFF" Offset="0.25"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill" EndPoint="1,0" StartPoint="0,0">
    <GradientStop Color="#00FFFFFF" Offset="0"/>
    <GradientStop Color="#60FFFFFF" Offset="0.4"/>
    <GradientStop Color="#60FFFFFF" Offset="0.6"/>
    <GradientStop Color="#00FFFFFF" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarIndicatorDarkEdgeLeft" EndPoint="1,0" StartPoint="0,0">
    <GradientStop Color="#0C000000" Offset="0"/>
    <GradientStop Color="#20000000" Offset="0.3"/>
    <GradientStop Color="#00000000" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarIndicatorDarkEdgeRight" EndPoint="1,0" StartPoint="0,0">
    <GradientStop Color="#00000000" Offset="0"/>
    <GradientStop Color="#20000000" Offset="0.7"/>
    <GradientStop Color="#0C000000" Offset="1"/>
    </LinearGradientBrush>
    <RadialGradientBrush x:Key="ProgressBarIndicatorLightingEffectLeft" RadiusY="1" RadiusX="1" RelativeTransform="1,0,0,1,0.5,0.5">
    <GradientStop Color="#60FFFFC4" Offset="0"/>
    <GradientStop Color="#00FFFFC4" Offset="1"/>
    </RadialGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarIndicatorLightingEffect" EndPoint="0,0" StartPoint="0,1">
    <GradientStop Color="#60FFFFC4" Offset="0"/>
    <GradientStop Color="#00FFFFC4" Offset="1"/>
    </LinearGradientBrush>
    <RadialGradientBrush x:Key="ProgressBarIndicatorLightingEffectRight" RadiusY="1" RadiusX="1" RelativeTransform="1,0,0,1,-0.5,0.5">
    <GradientStop Color="#60FFFFC4" Offset="0"/>
    <GradientStop Color="#00FFFFC4" Offset="1"/>
    </RadialGradientBrush>
    <LinearGradientBrush x:Key="ProgressBarIndicatorGlassyHighlight" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#90FFFFFF" Offset="0.5385"/>
    <GradientStop Color="#00FFFFFF" Offset="0.5385"/>
    </LinearGradientBrush>
    <Style x:Key="MyProgressBarStyle" TargetType="{x:Type ProgressBar}">
    <Setter Property="Foreground" Value="#01D328"/>
    <Setter Property="Background" Value="{StaticResource ProgressBarBackground}"/>
    <Setter Property="BorderBrush" Value="{StaticResource ProgressBarBorderBrush}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type ProgressBar}">
    <Grid x:Name="TemplateRoot" SnapsToDevicePixels="true">
    <TextBlock Text="{TemplateBinding Tag}" Grid.ZIndex="2" Foreground="Black"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"/>
    <TextBlock Text="{TemplateBinding Tag}"
    Grid.ZIndex="3" Foreground="White"
    Width="{Binding ElementName=rectangle, Path=ActualWidth}"
    TextAlignment="Center"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Center">
    <TextBlock.Clip>
    <RectangleGeometry>
    <RectangleGeometry.Rect>
    <MultiBinding Converter="{StaticResource RectConverter}">
    <Binding ElementName="Indicator" Path="ActualWidth"/>
    <Binding ElementName="Indicator" Path="ActualHeight"/>
    </MultiBinding>
    </RectangleGeometry.Rect>
    </RectangleGeometry>
    </TextBlock.Clip>
    </TextBlock>
    <Rectangle x:Name="rectangle" Fill="{TemplateBinding Background}" RadiusY="2" RadiusX="2"/>
    <Border Background="{StaticResource ProgressBarGlassyHighlight}" CornerRadius="2" Margin="1"/>
    <Border BorderBrush="#80FFFFFF" BorderThickness="1,0,1,1" Background="{StaticResource ProgressBarTopHighlight}" Margin="1"/>
    <Rectangle x:Name="PART_Track" Margin="1"/>
    <Decorator x:Name="PART_Indicator" HorizontalAlignment="Left" Margin="1">
    <Grid x:Name="Foreground">
    <Rectangle x:Name="Indicator" Fill="{TemplateBinding Foreground}"/>
    <Grid x:Name="Animation" ClipToBounds="true">
    <Rectangle x:Name="PART_GlowRect" Fill="{StaticResource ProgressBarIndicatorAnimatedFill}" HorizontalAlignment="Left" Margin="-100,0,0,0" Width="100"/>
    </Grid>
    <Grid x:Name="Overlay">
    <Grid.ColumnDefinitions>
    <ColumnDefinition MaxWidth="15"/>
    <ColumnDefinition Width="0.1*"/>
    <ColumnDefinition MaxWidth="15"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
    <RowDefinition/>
    <RowDefinition/>
    </Grid.RowDefinitions>
    <Rectangle x:Name="LeftDark" Fill="{StaticResource ProgressBarIndicatorDarkEdgeLeft}" Margin="1,1,0,1" RadiusY="1" RadiusX="1" Grid.RowSpan="2"/>
    <Rectangle x:Name="RightDark" Grid.Column="2" Fill="{StaticResource ProgressBarIndicatorDarkEdgeRight}" Margin="0,1,1,1" RadiusY="1" RadiusX="1" Grid.RowSpan="2"/>
    <Rectangle x:Name="LeftLight" Grid.Column="0" Fill="{StaticResource ProgressBarIndicatorLightingEffectLeft}" Grid.Row="2"/>
    <Rectangle x:Name="CenterLight" Grid.Column="1" Fill="{StaticResource ProgressBarIndicatorLightingEffect}" Grid.Row="2"/>
    <Rectangle x:Name="RightLight" Grid.Column="2" Fill="{StaticResource ProgressBarIndicatorLightingEffectRight}" Grid.Row="2"/>
    <Border x:Name="Highlight1" Background="{StaticResource ProgressBarIndicatorGlassyHighlight}" Grid.ColumnSpan="3" Grid.RowSpan="2"/>
    <Border x:Name="Highlight2" Background="{StaticResource ProgressBarTopHighlight}" Grid.ColumnSpan="3" Grid.RowSpan="2"/>
    </Grid>
    </Grid>
    </Decorator>
    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
    </Grid>
    <ControlTemplate.Triggers>
    <Trigger Property="Orientation" Value="Vertical">
    <Setter Property="LayoutTransform" TargetName="TemplateRoot">
    <Setter.Value>
    <RotateTransform Angle="-90"/>
    </Setter.Value>
    </Setter>
    </Trigger>
    <Trigger Property="IsIndeterminate" Value="true">
    <Setter Property="Visibility" TargetName="LeftDark" Value="Collapsed"/>
    <Setter Property="Visibility" TargetName="RightDark" Value="Collapsed"/>
    <Setter Property="Visibility" TargetName="LeftLight" Value="Collapsed"/>
    <Setter Property="Visibility" TargetName="CenterLight" Value="Collapsed"/>
    <Setter Property="Visibility" TargetName="RightLight" Value="Collapsed"/>
    <Setter Property="Visibility" TargetName="Indicator" Value="Collapsed"/>
    </Trigger>
    <Trigger Property="IsIndeterminate" Value="false">
    <Setter Property="Background" TargetName="Animation" Value="#80B5FFA9"/>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>

    矩形转换器
    public class RectConverter : IMultiValueConverter
    {
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
    double width = (double)values[0];
    double height = (double)values[1];
    return new Rect(0, 0, width, height);
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
    throw new NotImplementedException();
    }
    }

    关于wpf - 带有动态文本和文本颜色更新的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5167867/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com