繁体   English   中英

WPF MVVM:顶部面板阻止所有控件

[英]WPF MVVM: Top panel to block all controls

我的主窗口视图

<Window.Resources>
       <BooleanToVisibilityConverter x:Key="BoolToVisibility"/>
</Window.Resources>

<Grid x:Name="TopGrid">
    <Rectangle x:Name="TopPanel" Grid.ZIndex="3" 
               Fill="LightBlue"  Opacity="0.3" 
               Visibility="{Binding IsContentBlocked, Mode=TwoWay, Converter={StaticResource BoolToVisibility}}" />
    <Grid Name="main"  DataContext="{StaticResource mainViewModel}">

        <Grid.RowDefinitions>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1.2*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <!-- Here my controls: stackpanel, buttons, groupboxes, etc. -->
   </Grid>
</Grid>

查看型号

    private bool isContentBlocked = false;        

    public bool IsContentBlocked
    {
        get
        {
            return this.isContentBlocked;
        }

        set
        {
            if (this.isContentBlocked == value)
            {
                return;
            }

            this.isContentBlocked = value;
            OnPropertyChanged("IsContentBlocked");
        }
    }

最初,当我启动 WPF 应用程序时,应隐藏顶部面板,因此应启用所有内容,用户应该可以玩它们,但由于某种原因,顶部面板并未隐藏,而是显示出来,因此无法访问所有内容. 我使用一个矩形来使内容显示为块状。

我究竟做错了什么?

我的视图模型正确地实现了 INotifyPropertyChanged。

假设您的IsContentBlocked属性在mainViewModel定义,您应该将TopGridDataContext设置为这个

<Grid x:Name="TopGrid" DataContext="{StaticResource mainViewModel}">
    <Rectangle x:Name="TopPanel" Grid.ZIndex="3" 
               Fill="LightBlue"  Opacity="0.3" 
               Visibility="{Binding IsContentBlocked, Converter={StaticResource BoolToVisibility}}" />
    <Grid Name="main">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1.2*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <!-- Here my controls: stackpanel, buttons, groupboxes, etc. -->
    </Grid>
</Grid>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM