创建叠加层以禁用所有其他表单元素

时间:2015-06-12 05:20:58

标签: c# wpf xaml adorner

我想编写一个用户控件来输入新密码。这应该是一个按钮"更改密码"在我看来,当用户点击该按钮时,应该由PasswordBox和两个按钮SaveDiscard替换。当用户点击Save按钮时,应使用新密码作为参数调用DataContext中的方法。

我的问题是,当密码用户控件处于"更改密码状态时,还必须有类似覆盖的东西,禁用视图的其余部分。并且我必须在PasswordBox下面的叠加层上显示一个虚拟键盘。

我正在寻找一个提示,走哪条路。我认为Adorner应该这样做,但我是WPF的新手并且不知道,如果这是正确的方式。

我不想创建弹出窗口。我想在那里显示PasswordBox,其中"更改密码"按钮已经。

修改

现在,我有这样的话:

<TextBlock Grid.Column="0" Grid.Row="2" Text="{lex:LocText Password}"/>
<Button Grid.Column="2" Grid.Row="2" Visibility="{Binding IsPasswordBoxVisible, Converter={StaticResource NegatedBooleanVisibilityConverter}}" Command="{Binding ShowPasswordBoxCommand}" Content="{lex:LocText SetNewPassword}"/>
<PasswordBox Grid.Row="2" Grid.Column="2" Visibility="{Binding IsPasswordBoxVisible, Converter={StaticResource BooleanVisibilityConverter}}" ... />

PasswordBox应该出现在现在的同一个地方,但是在叠加层上方(并且有两个按钮&#34;保存&#34;和&#34;取消&#34; next它)。

1 个答案:

答案 0 :(得分:1)

这将附加属性Panel.ZIndex放置&#34; Overlay&#34;在其他一切之上。您可以设置&#34; Overlay&#34;的可见性。在代码中或使用DataTrigger。

如果您在布局中使用Canvas或Grid,请将控件放在更高的ZIndex上

<Grid x:Name="Overlay" Panel.ZIndex="1000" Visibility="Collapsed">
    <Grid.Background>
      <SolidColorBrush Color="Black" Opacity=".5"/>
    </Grid.Background>

    <!-- Add controls as needed -->
  </Grid>

  <!-- Use whatever layout you need -->
  <ContentControl x:Name="MainContent" />

</Grid>

更新代码:

 <Grid x:Name="Overlay" Panel.ZIndex="9999" Visibility="Visible">
            <Grid.Background>
                <SolidColorBrush Color="Black" Opacity=".25"/>
            </Grid.Background>           
            <Grid Height="100" Width="300" Background="WhiteSmoke">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="5*"/>
                    <ColumnDefinition Width="5*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="5*"/>
                    <RowDefinition Height="5*"/>
                </Grid.RowDefinitions>
                <TextBlock Text="Password" Width="120" Height="50"/>
                <PasswordBox Grid.Column="1" Width="120" Height="30"/>
                <Button Grid.Row="1" Grid.Column="1" Margin="5" Content="Submit"/>                
            </Grid>
        </Grid>

        <!-- Use whatever layout you need -->
        <ContentControl x:Name="MainContent" />

    </Grid>