如何在wpf中禁用整个视图

时间:2010-08-26 18:37:45

标签: wpf prism

我正在研究MVVM模式的WPF应用程序。

我的应用程序包含2个模块。 第一个模块由一个视图组成。在该视图的底行我添加了另一个Region,其中另一个模块加载了自己的View。

问题:每当用户在上部视图中进行任何更改时,下部视图(由另一个模块加载)都应该被禁用。

如何实现这一目标?有没有办法禁用整个视图?

3 个答案:

答案 0 :(得分:2)

XAML UI是元素的层次结构,通过将IsEnabled设置为false来禁用任何元素也会禁用其包含的所有子元素。如果您需要保留滚动条或工具提示等功能,则需要更精细的IsEnabled设置。

答案 1 :(得分:0)

“View.IsEnabled = false”会不够?

答案 2 :(得分:0)

您可以在视图中放置另一个控件,当您加载视图模型时,该控件将位于其余部分的顶部。

例如,如果您的视图位于表格的第2行,您还可以放置一个在加载时占据整行的边框,这样用户在可见时就无法执行任何操作。下面的IsWorking只是您在开始加载数据时设置的视图模型中的属性,或者是您不希望用户使用该控件的任何操作。

<Grid>
   <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
   </Grid.RowDefinitions>

   <myviews:View1 Grid.Row="0" />

   <myviews:View2 Grid.Row="1" />
   <Border Background="#30505050" 
           Grid.Row="1"
           Visibility="{Binding Path=IsWorking, Converter={x:Static CommonConverters:BooleanToVisibilityConverter.Default}}"/>
</Grid>

如果您想要添加更多功能,例如添加在工作时播放的动画,您还可以将边框置于您自己的控件或用户控件中。