先圖為敬
前台代碼
<Window x:Class="Zero_Gjy.UserControls.MProgressBar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mui="http://firstfloorsoftware.com/ModernUI"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Background="{x:Null}"
WindowStyle="None"
AllowsTransparency="True"
IsHitTestVisible="True"
WindowStartupLocation="CenterOwner"
>
<Grid Style="{StaticResource ContentRoot}">
<TextBlock Name="tb_progress" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<mui:ModernProgressRing IsActive="True" Width="80" Height="80" Style="{Binding SelectedItem.Tag, ElementName=CmbRingStyle}" />
</Grid>
</Window>
代碼中的“mui:ModernProgressRing” 是ModernUI中的一個控件,同學們也可以自己來實作同樣的效果,或者使用ProgressBar來替代,這裡就不贅述了。
背景代碼
using FirstFloor.ModernUI.Windows.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Zero_Gjy.Helper;
namespace Zero_Gjy.UserControls
{
/// <summary>
/// Interaction logic for MProgressBar.xaml
/// </summary>
public partial class MProgressBar : Window, INotifyPropertyChanged
{
double progress;
string progreesStr;
public event PropertyChangedEventHandler PropertyChanged;
public double Progress
{
get
{
return progress;
}
set
{
progress = value;
ProgreesStr = (int)(value/Max * ) + "%";
}
}
public string ProgreesStr
{
get
{
return progreesStr;
}
set
{
progreesStr = value;
if(PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ProgreesStr"));
}
}
}
public MProgressBar()
{
InitializeComponent();
this.tb_progress.SetBinding(TextBlock.TextProperty, new Binding("ProgreesStr") { Source = this });
}
public int Max = ;
public void Show(Window parent,int max)
{
Max = max;
this.Progress = ;
this.Owner = parent;
this.Owner.Opacity = ;
this.Owner.IsEnabled = false;
this.Show();
}
public void UpdateProgress(int progress)
{
this.Progress = progress;
}
public void CloseWindow()
{
this.Close();
this.Owner.Opacity = ;
this.Owner.IsEnabled = true;
}
}
}
背景代碼将進度值和前台的TextBlock綁定,實作進度的更新,特别要注意的是這幾句
this.Owner = parent;//父視窗
this.Owner.Opacity = ;//置灰
this.Owner.IsEnabled = false;//禁用
this.Show();//子視窗模式顯示
有的同學或許會說直接用ShowDialog()就行了,我試過之後發現父視窗無法實時更新進度,程序都在等待Dialog。。。
響應。