When you have operations in your software that take a long time to complete, you might find that displaying a progress bar will make your users feel better. At least they know that something is happening and the program hasn’t crashed.
In this example I will just simulate a “long” process with the DispatcherTimer.
Below is the XAML code.
<Window x:Class="ProgressBarSimple.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ProgressBarSimple"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Title="ProgressBarSimple" Height="150" Width="300">
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Name="lblCursorPosition" />
</StatusBarItem>
</StatusBar>
<ProgressBar Name="pb" Height="25" DockPanel.Dock="Top"
Minimum="0" Maximum="100" Value="2" />
<TextBox AcceptsReturn="True" Name="txtEditor" SelectionChanged="txtEditor_SelectionChanged" />
</DockPanel>
</Window>
By default, the minimum is 0 and the maximum is 100.
using System;
using System.Windows;
using System.Windows.Threading;
namespace ProgressBarSimple
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
pb.Value = 3;
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(20);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
pb.Value = pb.Value + 1;
}
private void txtEditor_SelectionChanged(object sender, RoutedEventArgs e)
{
int row = txtEditor.GetLineIndexFromCharacterIndex(txtEditor.CaretIndex);
int col = txtEditor.CaretIndex - txtEditor.GetCharacterIndexFromLineIndex(row);
lblCursorPosition.Text = "Line " + (row + 1) + ", Char " + (col + 1);
}
}
}
