c# – 带有值数据绑定的WPF ProgressBar
发布时间:2020-12-15 08:17:20 所属栏目:百科 来源:网络整理
导读:我正在尝试在 WPF中数据绑定ProgressBar的value属性.我有一个按钮设置为增加ProgressBar的值的数据绑定int属性.当我按下按钮时,它应该使ProgressBar的值从1增加到100.但是……它似乎没有工作,我不确定我做错了什么.这是我的XAML …… Window x:Class="Progre
我正在尝试在
WPF中数据绑定ProgressBar的value属性.我有一个按钮设置为增加ProgressBar的值的数据绑定int属性.当我按下按钮时,它应该使ProgressBar的值从1增加到100.但是……它似乎没有工作,我不确定我做错了什么.这是我的XAML ……
<Window x:Class="ProgressBarExample2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="250" Width="400" Background="WhiteSmoke"> <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <Button Name="goButton" Height="30" Width="50" Margin="0,10,50" Click="goButton_Click">GO!</Button> <ProgressBar Name="progressBar" Width="300" Height="30" Value="{Binding Percent,UpdateSourceTrigger=PropertyChanged}" /> </StackPanel> 这是我的代码背后…… public partial class MainWindow : Window,INotifyPropertyChanged { #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected void NotifyPropertyChange(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } } #endregion private int percent = 0; public int Percent { get { return this.percent; } set { this.percent = value; NotifyPropertyChange("Percent"); } } public MainWindow() { InitializeComponent(); } private void goButton_Click(object sender,RoutedEventArgs e) { for (Percent = 0; Percent <= 100; Percent++) { Thread.Sleep(50); } } } 解决方法
Thread.Sleep阻止UI线程并停止进度条的动画.
您可以使用以下命令暂停执行而不阻止UI线程.用Wait(50)替换你的Thread.Sleep(50)调用 编辑:删除代表 /// <summary> /// Stop execution for a specific amount of time without blocking the UI /// </summary> /// <param name="interval">The time to wait in milliseconds</param> public static void Wait(int interval) { ExecuteWait(() => Thread.Sleep(interval)); } public static void ExecuteWait(Action action) { var waitFrame = new DispatcherFrame(); // Use callback to "pop" dispatcher frame IAsyncResult op = action.BeginInvoke(dummy => waitFrame.Continue = false,null); // this method will block here but window messages are pumped Dispatcher.PushFrame(waitFrame); // this method may throw if the action threw. caller's responsibility to handle. action.EndInvoke(op); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |