我想创建一个UI序列,用户点击一个按钮,它会弹出一个小面板,下面有一个按钮和一个文本框,可能还有一个小的项目列表。该对话框是非模式的,更重要的是,当您单击主窗口中的其他位置时,该对话框就会消失。
例如,当你点击Internet Explorer7中的“收藏夹”星形图标,或者在Firefox中点击两次地址栏中的星形图标时,就会弹出书签编辑器对话框。
要做到这一点,最干净的方法是什么?
当一个按钮被点击时,我是否应该使用一个UserControl并绝对确定它的位置?如果是这样,当用户单击其他地方时,我如何隐藏它?
发布于 2009-05-27 05:07:30
我想说做你想做的事情最干净的方法就是使用Popup。Popup类显示一个浮动在屏幕上其他元素上方的元素,但它是非模式的,并且可以配置为在用户离开它时消失-非常适合于非模式对话框。Popup类具有一些属性,这些属性允许您控制它相对于另一个控件(在本例中是您希望用户按下以打开弹出窗口的按钮)的显示位置。
下面是一个全XAML的示例:
<Grid>
<ToggleButton HorizontalAlignment="Center" VerticalAlignment="Top"
x:Name="PopButton" Content="Pop"/>
<Popup Placement="Bottom" PlacementTarget="{Binding ElementName=PopButton}" StaysOpen="False"
IsOpen="{Binding ElementName=PopButton, Path=IsChecked, Mode=TwoWay}">
<Rectangle Height="100" Width="200" Fill="Blue"/>
</Popup>
</Grid>
您还可以使用命令或事件处理程序从代码打开/关闭弹出窗口。
Placement和PlacementTarget属性设置弹出式窗口的显示位置,以及弹出式窗口将相对于哪个控件显示(还有其他一些选项可以让弹出式窗口相对于当前位置和鼠标显示)。将StaysOpen设置为False将使WPF在用户单击弹出窗口时自动关闭该弹出窗口。
默认情况下,弹出窗口没有自己的样式-它只是一个浮动内容的容器-所以你必须根据需要设置它的样式,使其看起来像你的窗口chrome/工具栏/等等。
https://stackoverflow.com/questions/915475
复制相似问题