如何在 wpf 中制作多色分段进度条?

     2023-03-30     295

关键词:

【中文标题】如何在 wpf 中制作多色分段进度条?【英文标题】:How can I make a multi-colored segmented progress bar in wpf? 【发布时间】:2015-11-13 06:43:19 【问题描述】:

我正在尝试创建一个用作分段进度条的 UserControl。输入是对象的集合,每个对象都有一个类别、一个持续时间属性和状态属性。 UserControl 应该拉伸父控件的宽度和高度。集合中的每个项目都应该代表进度条的一部分;段的颜色与状态有关,段的宽度与时长有关,覆盖在段上的文本将与类别或其他内容有关。

自定义进度条示例:

文本可能是集合项的 ID,顶部段颜色与状态相关,底部颜色与类别相关,宽度与持续时间相关。

我考虑过的一些选项:

制作一个堆栈面板,并以某种方式定义每个项目的宽度并将整个项目包装在一个视图框中,以使其拉伸高度和宽度。如何控制文本大小,如何使内容适合高度,如何将堆栈面板绑定到集合? 为网格控件创建一个附加属性,该属性将动态创建列并将集合项映射到网格。看起来工作量很大,我希望有一个更简单的解决方案,因为我的要求非常具体。 也许有办法覆盖统一网格以使其不统一? 也许我应该只使用所有代码隐藏并通过遍历我的集合来绘制矩形?

无论哪种方式,我都在祈祷有人可能知道我的问题的简单解决方案。

【问题讨论】:

【参考方案1】:

这是自定义进度条解决方案的完整工作建议。

代码在这里:http://1drv.ms/1QmAVuZ

1 .如果所有步骤的宽度不一样,我更喜欢使用具有列和不同宽度的网格

这些列是根据以下类动态构建的:

public class StepItem

    public int Length  get; set; 
    public int Index  get; set; 
    public String  Label  get; set; 
    public Brush Brush  get; set; 

2。我选择实现一个CustomControl并继承ItemsControl

CustomControl,因为我不想处理Progressbar 模板部分的实现。

ItemsControl 因为:

-我想向ItemsSource 属性提供StepItems 的集合

-ItemsControl 可以有一些DataTemplate 作为每个项目的模板

-ItemsControl 可以有任何PanelGrid 作为模板呈现项目的集合

3.该组件在 Generic.xaml 中有模板

-layoutGrid 会有“连续的彩虹”

-overlayGrid 将根据进度部分显示在步骤上或完全结束(如果没有进度)

-ItemsPresenter会呈现DataTemplates对应每个StepItem的集合

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="x:Type local:ProgressItemsControl">
            <Border BorderBrush="TemplateBinding BorderBrush"
                    BorderThickness="TemplateBinding BorderThickness">
                <Grid x:Name="layoutGrid">
                    <ItemsPresenter SnapsToDevicePixels="TemplateBinding SnapsToDevicePixels"/>
                    <Grid x:Name="overlayGrid" Width="100" HorizontalAlignment="Right" Background="White"/>
                </Grid>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>

4.自定义 ItemsPanel 以使用 Grid(而不是垂直布局)

<Setter Property="ItemsPanel">
    <Setter.Value>
        <ItemsPanelTemplate >
            <Grid x:Name="stepsGrid" IsItemsHost="True" />
        </ItemsPanelTemplate>
    </Setter.Value>
</Setter>

5.在组件的代码后面,列宽的设置

int i = 0;
foreach (StepItem stepItem in ItemsSource)

    total += stepItem.Length;
    var columnDefinition = new ColumnDefinition()  Width = new GridLength(stepItem.Length, GridUnitType.Star) ;
    stepsGrid.ColumnDefinitions.Add(columnDefinition);
    Grid.SetColumn(stepsGrid.Children[i], stepItem.Index);
    i++;

6.用于声明可监控的依赖属性的代码

(摘录)

public int Value

    get  return (int)GetValue(ValueProperty); 
    set  SetValue(ValueProperty, value); 

// Using a DependencyProperty as the backing store for Value.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register("Value", typeof(int), typeof(ProgressItemsControl), new PropertyMetadata(0));

7.组件的使用

<local:CustomProgressBar
    x:Name="customProgressBar1"
    HorizontalAlignment="Left" Height="50" Margin="32,49,0,0"      
    VerticalAlignment="Top" Width="379"/>

8.为组件提供数据

private List<StepItem> stepItems = new List<StepItem>
            new StepItem
                Index=0,
                Label="Step1",
                Length=20,
                Brush = new SolidColorBrush(Color.FromArgb(255,255,0,0)),
            new StepItem
                Index=4,
                Label="Step5",
                Length=25,
                Brush = new SolidColorBrush(Color.FromArgb(255,0,128,0)),
           ,
        ;
void MainWindow_Loaded(object sender, RoutedEventArgs e)

    progressItemsControl1.ItemsSource = stepItems;

问候

【讨论】:

如何在Android中制作这个进度条? [关闭]

】如何在Android中制作这个进度条?[关闭]【英文标题】:HowtomakethisprogressbarinAndroid?[closed]【发布时间】:2017-09-0907:46:53【问题描述】:我想在android中制作这个进度条【问题讨论】:欢迎来到SO..在发布问题***.com/help/how-to-ask之前... 查看详情

如何在kivy中制作圆形进度条?

】如何在kivy中制作圆形进度条?【英文标题】:Howtomakecircularprogressbarinkivy?【发布时间】:2018-11-0516:04:11【问题描述】:我想用kivy和python制作一个简单的圆形进度条。我搜索了在线文档和GitHub曲目,但没有找到解释循环进度条... 查看详情

如何在swift 3中制作多色标签栏

】如何在swift3中制作多色标签栏【英文标题】:Howtomakemultiplecolortabbarinswift3【发布时间】:2016-12-1410:11:21【问题描述】:上周我一直在努力寻找解决方案,但在尝试了我能找到或想到的所有可能解决方案后,我没有运气。我找到... 查看详情

如何在没有 PHP Pusher 的情况下制作实时进度条

】如何在没有PHPPusher的情况下制作实时进度条【英文标题】:HowToMakeRealtimeProgressbarWithoutPHPPusher【发布时间】:2021-10-1602:17:25【问题描述】:我陷入了这个问题,关于在php上制作实时进度条(没有phppusher)假设我有10行数据,将... 查看详情

将图像上传到 Firebase 存储时如何制作进度条?

】将图像上传到Firebase存储时如何制作进度条?【英文标题】:howcanimakeaprogressbarwheniuploadaimagetomyfirebasestorage?【发布时间】:2019-09-1403:31:44【问题描述】:我想取得进展,向用户展示上传了多少文件,这样他就不会在上传过程中... 查看详情

圆形进度条 Android

...有自己的时间限制。有一个iOS应用pTimer+,我想在Android中制作类似的倒数计时器。(来源:jiaojianli.com)到目前为止,我能够实现类似于倒数计时器但没有段或块概念的圆形进度条。【问题讨论】:【 查看详情

在 Blend 中用图像制作进度条

...酒吧的硬币容器和绿色酒吧本身。唯一的问题是我不知道如何设置这些东西。【问题讨论】:【参考方案1 查看详情

如何以编程方式将图像放入进度条(WPF)

】如何以编程方式将图像放入进度条(WPF)【英文标题】:Howtoputanimageinaprogressbarprogrammatically(WPF)【发布时间】:2015-11-2616:45:16【问题描述】:我是WPF的新手,我需要一些帮助,将图像放在我的进度条中(以编程方式)。我发现... 查看详情

使用 WPF 的网格中的按钮数组

...如果我单击按钮,所有按钮都使用相同的事件处理程序。如何使行中的每个进度条和按钮不同?<W 查看详情

wpf自定义绕圈进度条(转)

在设计界面时,有时会遇到进度条,本次讲解如何设计自定义的绕圈进度条,直接上代码: 1、控件界面<UserControlx:Class="ProgressBarControl"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/wi 查看详情

vs2008中slider控件制作播放器的进度条,如何在视频播放时改变滑块位置

现在改变滑块位置来选择视频播放位置的功能已经实现,但是不知道在视频播放时怎么来实现滑块随视频播放在进度条上前进刚看了,就是SetPor(intpos);该函数可以定位Slider的任意位置。首先要用SetRange()实现Slider的最大值与最小... 查看详情

如何在android中实现材料设计圆形进度条

】如何在android中实现材料设计圆形进度条【英文标题】:Howtoimplementamaterialdesigncircularprogressbarinandroid【发布时间】:2015-01-0501:04:38【问题描述】:我想制作一个类似于InboxbyGmailandroid应用中的MaterialDesign圆形进度条。我如何实现... 查看详情

有没有办法在 Apple Watch 中制作类似 iPhone 的进度条?

】有没有办法在AppleWatch中制作类似iPhone的进度条?【英文标题】:IsthereanywaytomakelikeiPhoneprogressbarinAppleWatch?【发布时间】:2015-04-0709:05:42【问题描述】:大家好,我是AppleWatch开发的新手,有什么方法可以在AppleWatch中显示进度条... 查看详情

多线程任务更新 1 个进度条 - UI C# WPF

】多线程任务更新1个进度条-UIC#WPF【英文标题】:Multiplethreadstasksupdating1progressbar-UIC#WPF【发布时间】:2021-07-1619:30:51【问题描述】:我一直在四处寻找有类似问题的人,但没有找到任何东西。我正在使用WPFUI编写C#应用程序。要... 查看详情

在 WPF 中,DoubleAnimation 后 UIElement 属性无法更改?

...:54:10【问题描述】:好的,我正在使用WPF为我的MP3播放器制作一个GUI,并且我有一个边框,它会在播放曲目的每一秒时扩大其宽度属性,从而为当前播放的歌曲制作一个“进度条”。我将边框命名 查看详情

如何用jquery制作进度条?

】如何用jquery制作进度条?【英文标题】:howtomakeaprogressbarwithjquery?【发布时间】:2012-02-0713:34:48【问题描述】:我想知道如何将其制作为简单的代码。我在一个网站上找到了一些我想用于我正在开发的网站的东西。问题是我试... 查看详情

如何制作winform中自定义进度条

参考技术A先在窗体上面放置一个DualProgressBar,这个类型的滚动条需要4个Painter去描绘,,所以可以再分别在窗体上面选择对应类型的Painter,然后分别设置好Painter的属性,主要是颜色类和样式类,有的还涉及到二种颜色,有的样... 查看详情

在wpf中怎么实现像windowsmeidaplayer播放器那样的隐藏进度条

...ment时这些按钮隐藏起来。就像windows7windowsmeidaplayer下方的进度条那样我的意思是像windowsmeidaplayer播放器这样,当鼠标移动进来的时候(进度条,暂停按钮这些)显示,移动出去时候就隐藏建议你用BLEND来做这个动画,通过自定义... 查看详情