如何在c#wpf窗口中一个接一个地显示一组标签?

时间:2014-04-23 04:52:10

标签: c# wpf datetime

我有一个wpf窗口,它有四个标签m1,m2,m3,m4。当我点击窗口中的一个按钮时,所有四个标签应该一个接一个地显示。但是我显示所有标签这应该不会发生。

private void button_Click(object sender, RoutedEventArgs e)
{
m1.Content = DateTime.Now.ToString("HH:mm:ss") + "      Establishing Connection";
//some code
m2.Content = DateTime.Now.ToString("HH:mm:ss") + "      Connected";
//some code
m3.Content = DateTime.Now.ToString("HH:mm:ss") + "      Processing";
//some code
m4.Content = DateTime.Now.ToString("HH:mm:ss") + "      Finished";

}

运行应用程序后,窗口显示以下所有标签,一次显示,而不是一个接一个地显示

  

10:14:20建立连接

     

10:14:24已连接

     

10:14:26处理

     

10:14:30完成

2 个答案:

答案 0 :(得分:1)

您正在寻找的容器称为StackPanel,它会自动将任何元素一个接一个地放在其中。

实施例

<StackPanel Orientation="Vertical">
            <Label Name="m1"/>
            <Label Name="m2"/>
            <Label Name="m3"/>
            <Label Name="m4"/>
</StackPanel>

答案 1 :(得分:1)

您可以做的是在设置Content的{​​{1}}之后,您可以切换Label的{​​{1}},以便取代所有Visibility你马上就会一个接一个地得到它。正如@Dan建议使用Label来安排Label。还要注意每个操作后更新UI线程的一个重要方面。

以下是我使用的示例代码。

MainWindow.xaml

StackPanel

MainWindow.xaml.cs

Label

我希望它有所帮助。您还可以使用<StackPanel> <Button Content="Testing" Click="Button_Click" /> <Label Name="m1" Visibility="Hidden" /> <Label Name="m2" Visibility="Hidden" /> <Label Name="m3" Visibility="Hidden" /> <Label Name="m4" Visibility="Hidden" /> </StackPanel> 来避免UI冻结。

以下是使用public partial class MainWindow : Window { public MainWindow () { InitializeComponent (); } private async void Button_Click (object sender, RoutedEventArgs e) { m1.Content = DateTime.Now.ToString ("HH:mm:ss") + " Establishing Connection"; m1.Visibility = Visibility.Visible; await Task.Run (() => Thread.Sleep (2000)); m2.Content = DateTime.Now.ToString ("HH:mm:ss") + " Connected"; m2.Visibility = Visibility.Visible; await Task.Run (() => Thread.Sleep (2000)); m3.Content = DateTime.Now.ToString ("HH:mm:ss") + " Processing"; m3.Visibility = Visibility.Visible; await Task.Run (() => Thread.Sleep (2000)); m4.Content = DateTime.Now.ToString ("HH:mm:ss") + " Finished"; m4.Visibility = Visibility.Visible; await Task.Run (() => Thread.Sleep (2000)); } }

的代码

MainWindow.xaml.cs

BackgroundWorker