C# 设置可见性属性不显示控件
微调器控件的可见性有问题。 控件本身工作。。。如果我在初始化后立即将其设置为可见,它将按预期显示和设置动画 但是如果我试图从代码中显示它,它就永远不会被画出来 .cs文件(演示者) xaml.cs文件C# 设置可见性属性不显示控件,c#,wpf,multithreading,visibility,C#,Wpf,Multithreading,Visibility,微调器控件的可见性有问题。 控件本身工作。。。如果我在初始化后立即将其设置为可见,它将按预期显示和设置动画 但是如果我试图从代码中显示它,它就永远不会被画出来 .cs文件(演示者) xaml.cs文件 void IDocumentView.ShowDocumentProgressSpinner(bool show) { if (show) { this.DocumentProgressSpinner.Visibility = Visibility.Visible; } e
void IDocumentView.ShowDocumentProgressSpinner(bool show)
{
if (show)
{
this.DocumentProgressSpinner.Visibility = Visibility.Visible;
}
else
{
this.DocumentProgressSpinner.Visibility = Visibility.Hidden;
}
}
如果我在初始化微调器后立即将可见性设置为可见,则微调器将正常工作
主控件xaml的一部分(微调器是自定义控件)
真的
真的
该控件被调用,因为“windows微调器”被激活,只是该控件从未显示…问题是您正在调度程序线程上运行保存操作,而在保存操作期间,调度线程一直被阻塞。只有在保存操作完成后,UI才会更新,因此您永远不会看到“等待”状态。相反,您应该从事件分派中剥离一个新线程,并将等待指示器设置为可见。在单独的线程中执行保存操作,保存完成后,使用调度程序在调度程序线程上再次隐藏等待指示器
有关如何实现此功能的更多详细信息,请参阅。发布
ShowDocumentProgressSpinner
的代码。如果保存方法执行一些UI更新,该怎么办。。。在bckWorker中运行它不会阻止它更新UI线程GUI吗?UI更新需要通过Dispatcher完成。您可以(并且需要)在“保存线程”中执行多个异步Dispatcher.Invoke(…)调用。
void IDocumentView.ShowDocumentProgressSpinner(bool show)
{
if (show)
{
this.DocumentProgressSpinner.Visibility = Visibility.Visible;
}
else
{
this.DocumentProgressSpinner.Visibility = Visibility.Hidden;
}
}
...
<Viewbox Grid.Row="3" Width="30" Height="30"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<my:DocumentProgressSpinnerView x:Name="DocumentProgressSpinner" />
...
Thread.CurrentThread == Dispatcher.CurrentDispatcher.Thread
Dispatcher.FromThread(Thread.CurrentThread).CheckAccess()