我在旋转器控件的可见性方面遇到了问题。 控件本身有效...如果我在初始化之后将其设置为可见,则按预期显示和动画。
但是,如果我试图从代码中显示它,它永远不会被绘制......
.cs文件(演示者)
private void SaveDocument(Document aDocument)
{
if (AllowFlag != null)
{
this.View.ShowDocumentProgressSpinner(true);
this.Save(aDocument);
this.View.ShowDocumentProgressSpinner(false);
}
}
xaml.cs文件
void IDocumentView.ShowDocumentProgressSpinner(bool show)
{
if (show)
{
this.DocumentProgressSpinner.Visibility = Visibility.Visible;
}
else
{
this.DocumentProgressSpinner.Visibility = Visibility.Hidden;
}
}
如果我在初始化微调器工作后立即将可见性设置为可见!
主控件的xaml的一部分(微调器是自定义控件)
...
<Viewbox Grid.Row="3" Width="30" Height="30"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<my:DocumentProgressSpinnerView x:Name="DocumentProgressSpinner" />
...
可能是另一个线程问题,但我也尝试过:
Thread.CurrentThread == Dispatcher.CurrentDispatcher.Thread
TRUE
Dispatcher.FromThread(Thread.CurrentThread).CheckAccess()
TRUE
控件被调用,因为&#34; windows微调器&#34;被激活,只是控件永远不会显示...
答案 0 :(得分:2)
问题是您在调度程序线程上运行保存操作,并且在保存操作期间,调度线程一直被阻塞。只有在您的保存操作完成后,UI才会更新,因此您永远不会看到“等待”状态。相反,您应该从事件调度中旋转一个新线程,并将等待指示器设置为可见。在单独的线程中执行保存操作,保存完成后,使用调度程序在Dispatcher线程上再次隐藏等待指示符。
有关如何实现此目的的详细信息,请参阅this answer。