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%的问题。的更多相关文章

  1. 在子页面使用layer弹出层时只显示遮罩层,不显示弹出框问题

    最近子页面使用layer弹出层时只显示遮罩层,不显示弹出框,这个问题搞了很久,最后才发现,在子页面上使用弹出框时,如果只使用layer.alert()或者layer.open()时,会默认在当前页面弹 ...

  2. SpriteBuilder全屏弹出菜单的特殊效果

    但是等一下!这里可以有更多.对于全屏的弹出菜单,你可以在显示弹出全屏菜单时朦胧化背景的level视图. 通过修改SpriteBuilder中的color节点的Color属性(比如修改为black)和O ...

  3. JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法(转)

    原文:JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法 jquery-easyui是一个基于jquery的图形界面插件,利用easyui可以创建很多好看的网页界面 ...

  4. [WPF]程序全屏

    原文:[WPF]程序全屏 代码: 使用:

  5. html5 自带全屏API调用方法

    function FullScreen(){ var el = $('html')[0];//要全屏的元素,如果要全页面全屏,建议使用html节点而不是body节点 var isFullscreen= ...

  6. WPF 左键单击弹出菜单 ContextMenu

    原文:WPF 左键单击弹出菜单 ContextMenu WPF中的ContextMenu在XAML中可直接做出来,但是仅限于右键弹出菜单,如果需要添加左键弹出功能,只需要在事件中添加Click事件 X ...

  7. js实现全屏弹框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. Flash设置全屏后,放到网页中显示不正常

    stage.displayState = StageDisplayState.FULL_SCREEN;//全屏,注意当设置全屏后,放到网页中显示不正常

  9. WPF C# 多屏情况下,实现窗体显示到指定的屏幕内

    原文:WPF C# 多屏情况下,实现窗体显示到指定的屏幕内 针对于一个程序,需要在两个显示屏上显示不同的窗体,(亦或N个显示屏N个窗体),可以使用如下的方式实现. 主要涉及到的:System.Wind ...

随机推荐

  1. Prism for Xamarin.Forms

    一.使用环境 OS:Win 10 16273 VS:VS2017- 15.3.4 Xamarin:4.6.3.4,nuget:2.4 Android Emulator:Visual Studio fo ...

  2. error: The requested URL returned error: 401 Unauthorized while accessing

    我遇到的其中一个问题. 问题描述: 在git push -u origin master是,提示“error: The requested URL returned error: 401 Unauth ...

  3. 电商Banner设计背后的12个人性的秘密

  4. RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用

    Input Text和Click Button Input Text 关键字一般用来给输入框进行输入操作,该关键字接收两个参数[ locator | text ]. 示例1:启动安卓手机上一个APP的 ...

  5. 团队作业8——第二次项目冲刺(Beta阶段)Day6——5.25

    1.提供当天会议照片: 2.会议的内容: (1)讨论已经完成的功能,讨论存在的问题 (2)对于界面,谈谈各自的看法 (3)讨论接下来的任务和改进的地方 3.工作安排: 队员 今日任务 明日任务 贡献比 ...

  6. Swing-JComboBox用法-入门

    JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对 ...

  7. 201521123055 《Java程序设计》第7周学习总结

    1. 本章学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 1.2 解释E remove(int index)源代码 1.3 结合1.1 ...

  8. 201521123108 《Java程序设计》第5周学习总结

    1. 本章学习总结 2. 书面作业 Q1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 答 ...

  9. 201521123112《Java程序设计》第3周学习总结

    1.本周学习总结 使用工具:百度脑图 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int ...

  10. 201521123081《Java程序设计》 第2周学习总结

    201521123081<Java程序设计>第2周学习总结 2017-03-04  14:35:49 1. 本周学习总结 学习了Java一些基本语句,了解了变量类型及其相互转化的方法: 学 ...