我想编写一个用户控件来输入新密码。这应该是一个按钮"更改密码"在我看来,当用户点击该按钮时,应该由PasswordBox
和两个按钮Save
和Discard
替换。当用户点击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它)。
答案 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>