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

时间:2014-06-18 15:34:20

标签: c# .net wpf xaml

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

  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>

1 个答案:

答案 0 :(得分:1)

我认为,如果你关闭对话框,你的WPF表格需要渲染控件, 因为OpenFileDialog涵盖了WPF窗口的部分内容。 如果你从CodeBehind设置可见性,你需要告诉你的窗口,它必须 再次渲染这个区域。

所以你可能会试着打电话:

LoadingScreen.Invalidate(true);

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


由于您使用WPF,因此可能有更好的解决方案。

期待您的第一个示例是您可以添加的窗口的ViewModel 具有BackingField的属性并实现INotifyPropertyChanged(当然还设置了DataContext):

private Visibility _loadScreenVisibility;

public Visibility LoadScreenVisibility
{
    get { return _loadScreenVisibility; }
    set
    {
        _loadScreenVisibility = value;
        OnPropertyChanged("LoadScreenVisibility");
    }
}

在您的XAML中,您可以使用

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