我正在使用边框控件作为加载屏幕覆盖在我的主窗口上,以便在打开几个大文件时使用。为此,我在创建对话框后将边框的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>
答案 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>