C# 打开对话框后更改WPF边框可见性

C# 打开对话框后更改WPF边框可见性,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我有一个边界控件,当我打开两个大文件时,我将它用作主窗口上的加载屏幕覆盖。为此,我将在创建对话框后将边框的可见性属性更改为可见。问题是边境从未真正出现过。这是不起作用的代码: var openFileDialog = new ViewerOpenFileDialog(); openFileDialog.ShowDialog(); LoadingScreen.Visibility = Visibility.Visible; ViewerViewModel.OpenFile(open

我有一个边界控件,当我打开两个大文件时,我将它用作主窗口上的加载屏幕覆盖。为此,我将在创建对话框后将边框的可见性属性更改为可见。问题是边境从未真正出现过。这是不起作用的代码:

  var openFileDialog = new ViewerOpenFileDialog();
  openFileDialog.ShowDialog();
  LoadingScreen.Visibility = Visibility.Visible;
  ViewerViewModel.OpenFile(openFileDialog.ParamFileName, openFileDialog.IdFileName);
  LoadingScreen.Visibility = Visibility.Hidden;
关闭对话框后,边框将永远不可见

但是,此代码确实有效:

   LoadingScreen.Visibility = Visibility.Visible;
   var openFileDialog = new ViewerOpenFileDialog();
   openFileDialog.ShowDialog();
   ViewerViewModel.OpenFile(openFileDialog.ParamFileName, openFileDialog.IdFileName);
   LoadingScreen.Visibility = Visibility.Hidden;
边框在文件加载后才可见,但在对话框打开时可见,这并不理想

以下是我的边框的XAML:

    <Border Name="LoadingScreen" Background="#80000000" VerticalAlignment="Stretch" Visibility="Hidden">
        <Grid>
            <TextBlock Margin="0" TextWrapping="Wrap" Text="Loading, Please Wait..." HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" FontWeight="Bold" />
        </Grid>
    </Border>

我假设,如果关闭对话框,WPF表单需要呈现控件, 因为OpenFileDialog覆盖了WPF窗口的一部分。 如果您从CodeBehind设置可见性,您需要告诉您的窗口,它必须 再次渲染此区域

所以你可以试着打电话:

LoadingScreen.Invalidate(真)

在第一个示例中设置可见性之后


因为您使用WPF,所以可能有更好的解决方案

第一个示例出现在窗口的ViewModel中,您只需添加 带有BackingField和implement
INotifyPropertyChanged
的属性(当然还要设置DataContext):

在XAML中,您可以使用

<Border Visibility="{Binding Path=LoadScreenVisibility, UpdateSourceTrigger=PropertyChanged}" ... >
    <... />
</Border>


为什么不自定义忙碌指示器的样式模板?您是否尝试启动一个新线程来打开文件并将加载屏幕可见性设置为隐藏?这应该给UI线程时间使加载屏幕可见。我通过使用您的建议将其设置在ViewModel中并将文件读取放在单独的线程中来修复它。谢谢
<Border Visibility="{Binding Path=LoadScreenVisibility, UpdateSourceTrigger=PropertyChanged}" ... >
    <... />
</Border>