gpt4 book ai didi

wpf - 使用 C# 在 wpf 中更新 StatusBar 中的文本

转载 作者:行者123 更新时间:2023-12-01 13:06:31 29 4
gpt4 key购买 nike

我在 wpf 的 StatusBar 中有一个要更新的文本框。
我在 ListBox 中有一个文件列表。在每个文件上,我都会通过调用方法 ProcessFile() 来执行一些操作。因此,每当文件处理完成时,我想在 StatusBar 文本中显示该文件的名称。
我尝试过这样的事情:

private void button_Click(object sender, RoutedEventArgs e)
{

statusBar.Visibility = Visibility.Visible;

DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(TimeConsumingMethod), frame);
Dispatcher.PushFrame(frame);
statusBar.Visibility = Visibility.Collapsed;
}

public object TimeConsumingMethod(Object arg)
{
((DispatcherFrame)arg).Continue = false;

foreach (string fileName in destinationFilesList.Items)
{
txtStatus.Text = fileName.ToString();
//Assume that each process takes some time to complete
System.Threading.Thread.Sleep(1000);
}
return null;
}
但我只能在状态栏中看到最后一个文件的名称。代码有什么问题?我该如何纠正?

最佳答案

还有更多方法可以做到这一点。

直接从代码中设置内容
您需要为 TextBox 命名这样您就可以访问它的内容:

XAML

<TextBox x:Name="myTextBox" />

C#
...
ProcessFile(someFileName);
myTextBox.Text = someFileName;

使用数据绑定(bind)
您需要创建一些对象并将其设置为 DataContextTextBox或一些包含该文本框的 WPF 元素(状态栏、窗口等)。

XAML:
<TextBox Text="{Binding Path=ProcessedFileName}" />

C#
public MyClass : INotifyPropertyChanged
{
public string ProcessedFileName {get; set;}

public void ProcessFile(string someFileName)
{
// Processing file code here

// When done processing, set file name to property
ProcessedFileName = someFileName;
OnPropertyChanged("ProcessedFileName");
}

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;

if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}

有关数据绑定(bind)的更多信息,请参阅 Data Binding Overview

关于wpf - 使用 C# 在 wpf 中更新 StatusBar 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743626/

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