WPF Popup全屏 弹出方法。解决只显示75%的问题。
WPF Popup全屏 弹出方法。解决只显示75%的问题。
WPF 中 Popup 有一个特点。当Popup的高度超过屏幕的75%的时候,只显示75%的高度。
如下代码:

<Window x:Class="WpfApplication13.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
WindowState="Maximized" WindowStyle="None" >
<Grid>
<Button Content="Open" Click="OnClick" Width="100" Height="25" VerticalAlignment="Bottom" />
<Popup x:Name="_popup" Placement="Absolute" Width="1920" Height="1080" >
<Grid>
<Rectangle></Rectangle>
<TextBlock x:Name="_txt" Text="TestFullPopup" />
</Grid>
</Popup>
</Grid>
</Window>


/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void OnClick(object sender, RoutedEventArgs e)
{
_popup.IsOpen = !_popup.IsOpen;
}
}

显示效果:

仔细看,下边是有个控钮的啊,大概只有75%的样式(我事先就知道了!嘿嘿!)。我们再看一下Snoop上的值。

真的只有75%, 1080 * 0.75 = 810。
大家可以试各种情况。高度超过75%,看看高度是不是只有75%。
我还试过,不从0,0 位置弹出 Popup,往下偏移一段距离。依然不可以。(试出来可以的,告诉我一下)
而且在CS中设置 Popup的大小也是无效的,我还试过开子线程,延迟一段时间再设置 Popup的高度也是无效的。
再看一下Snoop,我们既然能看到 PopupRoot的可视高度,那是不是可以修改,PopupRoot 的高度来显示。修改 Height为1080,成功可以全屏。
于是只要设置 PopupRoot.Height 属性就可以了!
首先想到就是用 VisualTreeHelper.GetChild(); 获取Popup的中的PopupRoot.
出现两个问题:1.使用VisualTreeHelper.GetChild(Popup),跟本拿不到 Popup的子控件。
2.PopupRoot 可能是一个内部的类型。反正我是没找到!找到的同学请告诉我一下。
只好使用 VisualTreeHelper.GetParent(),由于没找到 PopupRoot 类,只好先使用字串的判断方法。"System.Windows.Controls.Primitives.PopupRoot",直接上代码:

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void OnClick(object sender, RoutedEventArgs e)
{
_popup.IsOpen = !_popup.IsOpen; DependencyObject parent = _popup.Child; do
{
parent = VisualTreeHelper.GetParent(parent); if (parent != null && parent.ToString() == "System.Windows.Controls.Primitives.PopupRoot")
{
var element = parent as FrameworkElement; var mainWin = Application.Current.MainWindow; element.Height = mainWin.Height;
element.Width = mainWin.Width; break;
}
}
while (parent != null);
}
}

最终效果:

收工,睡觉。
可能没人会转,但转的一定要注明出处:http://www.cnblogs.com/gaoshang212/p/3157769.html
WPF Popup全屏 弹出方法。解决只显示75%的问题。的更多相关文章
- 在子页面使用layer弹出层时只显示遮罩层,不显示弹出框问题
最近子页面使用layer弹出层时只显示遮罩层,不显示弹出框,这个问题搞了很久,最后才发现,在子页面上使用弹出框时,如果只使用layer.alert()或者layer.open()时,会默认在当前页面弹 ...
- SpriteBuilder全屏弹出菜单的特殊效果
但是等一下!这里可以有更多.对于全屏的弹出菜单,你可以在显示弹出全屏菜单时朦胧化背景的level视图. 通过修改SpriteBuilder中的color节点的Color属性(比如修改为black)和O ...
- JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法(转)
原文:JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法 jquery-easyui是一个基于jquery的图形界面插件,利用easyui可以创建很多好看的网页界面 ...
- [WPF]程序全屏
原文:[WPF]程序全屏 代码: 使用:
- html5 自带全屏API调用方法
function FullScreen(){ var el = $('html')[0];//要全屏的元素,如果要全页面全屏,建议使用html节点而不是body节点 var isFullscreen= ...
- WPF 左键单击弹出菜单 ContextMenu
原文:WPF 左键单击弹出菜单 ContextMenu WPF中的ContextMenu在XAML中可直接做出来,但是仅限于右键弹出菜单,如果需要添加左键弹出功能,只需要在事件中添加Click事件 X ...
- js实现全屏弹框
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Flash设置全屏后,放到网页中显示不正常
stage.displayState = StageDisplayState.FULL_SCREEN;//全屏,注意当设置全屏后,放到网页中显示不正常
- WPF C# 多屏情况下,实现窗体显示到指定的屏幕内
原文:WPF C# 多屏情况下,实现窗体显示到指定的屏幕内 针对于一个程序,需要在两个显示屏上显示不同的窗体,(亦或N个显示屏N个窗体),可以使用如下的方式实现. 主要涉及到的:System.Wind ...
随机推荐
- Ubuntu 14.02 cmake升级 失败解决
错误的提示: CMake Error: Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly ...
- Nginx做文件下载服务器
这是最简单的一种办法,贴完代码就能用 server { listen 80; charset utf-8; server_name localhost; root /data/file/; autoi ...
- CentOS6.5下安装mfs分布式存储(转)
MFS文件系统的组成 1. 元数据服务器.在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当.希望今后MFS能支持多个m ...
- 201521123002《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 1.提交函数实 ...
- 201521123102 《Java程序设计》第3周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...
- 201521123005 《Java程序设计》 第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- 201521123014 《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 Q1 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用sync ...
- 【干货篇】步步为营,带你轻松掌握jQuery!
写在前面:经过系统的学习了原生JS之后,会发现其具有以下三个特点: 1.是一种解释性脚本语言(代码不进行预编译). 2.主要用来向 HTML 页面添加交互行为. 3.可以直接嵌入 HTML 页面,但写 ...
- eclipse版本选择
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会. Ec ...
- Servlet第七篇【Cookie和Session的区别、应用】
Session和Cookie的区别 从存储方式上比较 Cookie只能存储字符串,如果要存储非ASCII字符串还要对其编码. Session可以存储任何类型的数据,可以把Session看成是一个容器 ...