首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在WPF中设置子窗口的位置而不是所有者窗口的中心[已解决!]

在WPF中,可以通过设置子窗口的Left和Top属性来控制其位置。以下是一种常见的方法:

  1. 首先,在XAML中创建一个子窗口(例如,命名为ChildWindow):
代码语言:txt
复制
<Window x:Class="YourNamespace.ChildWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Child Window" Height="300" Width="400">
    <!-- 子窗口内容 -->
</Window>
  1. 在父窗口的代码中,创建并显示子窗口:
代码语言:txt
复制
private void ShowChildWindow()
{
    ChildWindow childWindow = new ChildWindow();
    
    // 设置子窗口的位置
    double parentLeft = this.Left;
    double parentTop = this.Top;
    double parentWidth = this.ActualWidth;
    double parentHeight = this.ActualHeight;
    
    double childWidth = childWindow.Width;
    double childHeight = childWindow.Height;
    
    double childLeft = parentLeft + (parentWidth - childWidth) / 2; // 设置子窗口在父窗口水平居中
    double childTop = parentTop + (parentHeight - childHeight) / 2; // 设置子窗口在父窗口垂直居中
    
    childWindow.Left = childLeft;
    childWindow.Top = childTop;
    
    childWindow.Owner = this; // 设置子窗口的所有者为父窗口
    childWindow.ShowDialog();
}

在上述代码中,我们首先获取父窗口的位置和大小,然后计算子窗口的位置,使其在父窗口中居中显示。最后,将子窗口的所有者设置为父窗口,并调用ShowDialog方法显示子窗口。

这样,子窗口就会在父窗口的中心位置显示出来。

对于WPF中设置子窗口位置的更多详细信息,您可以参考以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet 设置 X11 建立窗口之间父子关系

窗口最小化时,不会影响到所有者窗口 窗口可以超过所有者窗口范围 被拥有的窗口 = 窗口 所有者窗口 = “在拥有它那个窗口” 即与 WPF ChildWindow.Owner = MainWindow...以上 ChildWindow 为窗口 MainWindow 为 所有者窗口 核心 C# 代码如下 // 我们使用XSetTransientForHint函数将窗口a设置窗口b窗口...XSelectInput 方法时,那所有在窗口消息都能被所有者窗口收到,如果调用了 XSelectInput 则窗口收到窗口消息,即所有者窗口被子窗口遮挡部分将不能收到消息,被子窗口遮挡部分触摸或鼠标消息会被子窗口接收...¹ 以下情况会导致 BadMatch 错误: 新窗口不在与旧窗口相同屏幕上。 新窗口是指定窗口本身或指定窗口下级。 新窗口是 InputOnly 类型,窗口不是。...指定窗口具有 ParentRelative 背景,窗口与指定窗口深度不同。 总之,XReparentWindow 允许您在 X 窗口系统重新组织窗口层次结构。

11410

WindowsXamlHost:在 WPF 中使用 UWP 控件(Windows Community Toolkit)

以前可以在 WPF 中使用有限 UWP 控件,现在有了 WindowsXamlHost,则可以使用更多 UWP 原生控件了。...因为我们不是原生 UWP,而是 Host 在 WPF UWP 控件,所以会没有 Application。这在 UWP 控件初始化内部已经 catch 了,所以你可以忽略。...控件是一个新 HwndSource,这相当于 UWP 控件是通过窗口形式与 WPF 窗口放在一起 于是,只能指定一个矩形区域完全属于 UWP,在这个区域 WPF 控件无法与其获得交互或渲染叠加...关于 DPI 适配 为了让 UWP 控件能够在 WPF 窗口中获得正确 Per-Monitor DPI 适配效果,你需要设置为 PerMonitorV2 DPI 感知级别。...如果只是指定为 PerMonitor,那么切换 DPI 或者切换屏幕时候,只有 WPF 部分会缩放, UWP 部分不会变化。 ?

4.5K20

WPF 全屏窗口将让 Chrome 97 视频停止播放

无论是使用 WPF 全屏窗口,还是高性能全屏透明窗口,都会在 Chrome 97 以及使用 chromium 对应版本内核应用视频停止播放。...Chrome 97 功能,是功能,不是 bug 哦 除了 WPF 全屏窗口进入前台时,会让 Chrome 97 应用视频停止播放。...因为这是 Chrome 97 在内核里优化判断,只要有窗口满足 Windows Native Window Occlusion Detection 文档所描述条件,将会自动停止视频播放 此问题算报告给...WPF 应用,给应用窗口设置 Win32 窗口样式,设置 WM_Popup 样式,也能解决此问题,因为绕过了 Windows Native Window Occlusion Detection...- Stack Overflow 关于 WPF 高性能全屏透明窗口请看 WPF 制作高性能透明背景异形窗口(使用 WindowChrome 不要使用 AllowsTransparency=True)

89120

学习WPF——WPF布局——了解布局容器

WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有元素,并询问元素所期望尺寸 排列阶段,容器在合适位置放置元素,并设置元素最终尺寸 这是一个递归过程...,界面任何一个容器元素都会被遍历到 WPF布局容器继承机制 ?...DependencyObject(依赖属性)解决了仅仅存储改变了属性问题。默认值在依赖属性只存储一次。这只是依赖项属性一个好处,还有其他好处我们以后再聊。...、ListView这样控件) 布局属性 布局容器内元素对自身大小、位置有一定决定权 元素可以设置自身布局属性来调整自己位置和大小 HorizontalAlignment...Z轴顺序 我们知道在Canvas布局容器,如果位置重叠,后设置元素会盖住先设置元素, 如果想打破这种规定,那么可以使用ZIndex属性: ?

2.3K50

WPF 程序应用 Windows 10 真•亚克力效果

本文介绍如何在 WPF 程序应用 Windows 10 真•亚克力效果。(不是一些流行项目里面自己绘制亚克力效果。)...---- API 需要使用 API 是微软文档并未公开 SetWindowCompositionAttribute。...) - walterlv 当然,使用此 API 也可以做 Windows 10 早期模糊效果,比如: 在 Windows 10 上为 WPF 窗口添加模糊特效(就像开始菜单和操作中心那样) - walterlv...如何使用 为了方便地让你窗口获得亚克力效果,我做了两层不同 API: AcrylicBrush 当然,受到 Win32 启用亚克力效果限制,只能在窗口设置此属性 WindowAccentCompositor...注意事项 要使得亚克力效果可以生效,需要: 设置一个混合色 GradientColor 混合色不能是全透明(如果全透明,窗口亚克力部分就全透明穿透了),当然也不能全不透明,这样就看不到亚克力效果了

34610

WPF 开启Pointer消息存在

本文记录在 WPF 开启 Pointer 消息坑 屏幕键盘 启用了Pointer之后,调用Textbox.Focus(),起不来屏幕键盘,必须点在它之上才行,触摸在它之上才行 使用屏幕绝对坐标不是窗口坐标...默认 Pointer 消息是使用屏幕绝对坐标不是窗口坐标 可能存在获取 Stylus 事件时触摸点不准,此时可以通过获取 Touch 代替,详细请看 WPF will have a touch offset...· dotnet/wpf 但预计不会在 WPF 修复,原因是这是 Windows WM_Pointer 机制坑,和 WPF 其实没有关系 另一个解决方法是在关闭系统全局触摸反馈点,关闭方法请看...表现是当前触摸被某个获取焦点窗口捕获,此时触摸点到一个后台窗口,未激活窗口上,那此窗口依然可以收到触摸消息,无论这个窗口是在哪个进程上,只需要此窗口所在进程开启 Pointer 消息即可 原先交互是如果触摸被某个前台窗口捕获...,那么其他窗口将啥都收不到,包括 WM_Touch 消息或者实时触摸消息 滑动过程开启窗口触摸失效 在进行 Manipulation 过程,打开或者激活了窗口,将导致此窗口不接受触摸消息触摸失效。

79230

WPF 多指触摸拖拽窗口 拖动修改窗口坐标

WPF ,如果是鼠标点击拖动窗口坐标,可以调用 Window DragMove 方法,但是如果是触摸,就需要自己调用 Win32 方法实现 在 WPF ,调用 Window DragMove...,不是为了获取相对坐标。...Win32 方法可以拿到相对于屏幕坐标的鼠标坐标,触摸默认会将第一个触摸点转换为鼠标坐标,因此拿到坐标点不是相对于窗口,这样就能做到在移动时候不会抖 接下来判断相对上一次移动距离,如下面代码... /// SWP_NOOWNERZORDER:不改变 Z 序所有者窗口位置。...适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动露出窗口所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口任何部分和父窗口需要重画部分。

2.1K30

【译】Visual Studio 2019 WPF & UWP XAML 开发工具新特性

原文 | Dmitry 翻译 | 郑铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序XAML开发人员发布了许多新功能。...WPF Designer 现在完全适用于 WPF .NET Core 项目(v16.3) XAML 设计器缩放/位置现在默认为全部适合(v16.4): 根据客户反馈,我们重新评估了打开 XAML 窗口...弹出 XAML 编辑器作为与设计器(v16.4)分开单独窗口 显示引用程序集资源(v16.4): XAML IntelliSense 更新为支持显示来自 WPF Framework 和 WPF ....只需打开要在其中添加 merge 语句 XAML 文件,然后找到要合并文件,然后在解决方案资源管理器右键单击该文件即可。...合并资源字典 “编辑模板”现在可与第三方控件控件一起使用: 即使“编辑模板”现在不是源代码解决方案一部分,也可以创建控件模板副本。

7.2K30

dotnet 读 WPF 源代码笔记 使用 Win32 方法修改窗口坐标和大小对窗口依赖属性影响

WPF 依赖属性值,什么时候不会 本文将会用到很多 Win32 方法,在 dotnet 基金会开源了对 win32 等调用封装库,请看 https://github.com/dotnet/pinvoke...、弹出式窗口和顶层窗口尺寸、位置和 Z 序。...如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组顶部(根据参数hWndlnsertAfter设置)。... /// SWP_NOOWNERZORDER:不改变 Z 序所有者窗口位置。...适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动露出窗口所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口任何部分和父窗口需要重画部分。

70720

System.InvalidOperationException:“寄宿 HWND 必须是窗口。”

这是很典型 Win32 错误,本文介绍如何修复此错误。 ---- 一个最简嵌入其他窗口例子 我们在 MainWindow 嵌入一个其他窗口来承载新 WPF 控件。...WPF 可以使用 HwndSource 来包装一个 WPF 控件到 Win32 窗口,使用自定义继承自 HwndHost 类可以把 Win32 窗口包装成 WPF 控件。...这是一个 Win32 错误,因为我们试图将一个普通窗口嵌入到另一个窗口中,实际上要完成嵌入需要子窗口才行。 那么如何设置一个 Win32 窗口窗口呢?...: 需要设置窗口窗口,也就是设置 WindowStyle 为 WS_CHILD; 需要设置窗口窗口,也就是设置 ParentWindow 为 hwndParent.Handle(我们使用参数传入...现在再运行,即可正常显示此嵌套窗口: 另外,WindowStyle 属性最好加上 WS_CLIPCHILDREN,详情请阅读: 解决 WPF 嵌套窗口在改变窗口大小时候闪烁问题 ---- 参考资料

27020

WPF面试题-来自ChatGPT解答

View和ViewModel之间分离也使得团队合作更加高效,开发人员可以独立地进行界面和业务逻辑开发和测试。 20. 如何在WPF应用程序全局捕获异常?...说出使用WPF不是Winfrom一些优点 使用WPF不是WinForms有以下一些优点: 强大样式和外观控制:WPF提供了强大样式和外观控制功能,可以通过XAML和样式来定义控件外观和行为。...WPF框架会根据可视化树来确定UI元素位置和大小,并将它们渲染到屏幕上。 逻辑树是另一个层次结构,它描述了UI元素之间逻辑关系。逻辑树用于处理UI元素事件和命令。...在WPF应用程序,Page和Window是两种不同UI元素,它们有以下区别: 用途:Window用于创建独立顶级窗口,通常用作应用程序窗口。它可以包含其他UI元素,面板、控件等。...简而言之,Clone()方法创建一个完全副本,包括属性和对象引用,CloneCurrentValue()方法只复制当前属性值,不复制对象引用。

31730

Windows 下高 DPI 应用开发(UWP WPF Windows Forms Win32)

各种不同 Windows 桌面 UI 框架 微软主推 Windows 桌面 UI 框架有: UWP WPF Windows Forms Win32 与 C++ DirectX 后两者实际上并不是 UI...WPF 第一个版本(随 .NET Framework 3.5 发布)就支持系统级 DPI 感知。 .NET Framework 4.6.2 开始 WPF 才开始支持屏幕级 DPI 感知。... Per-Monitor V1 和 Per-Monitor V2 支持在操作系统级别是兼容,所以只需要修改 WPF 应用程序清单即可兼容第二代屏幕级 DPI 感知。...这里顶级窗口指的是没有父级窗口,指的是 Parent,不是 Owner。(实际上 API 在更早版本就引入了,这里有故事,详见本文末尾。)...并且更早,V2 带来非客户区缩放和窗口 DPI 变更消息 API 在 1507 和 1511(分别是 Windows 10 第一和第二个正式版本)就已经有了,不过是未公开(可参阅 【原创】实现每显示器高

69650

WPF 自定义文本框输入法 IME 跟随光标

先获取默认 IME 类窗口句柄是为了在多进程嵌入窗口时,让微软拼音输入法输入框跟随输入光标不是在左上角 _defaultImeWnd = IMENative.ImmGetDefaultIMEWnd...); 输入法在输入过程,将会通过 Windows 消息和当前窗口进行通讯,获取输入框所需坐标和输入文本等。...//解决surface上输入法光标位置不正确 //现象是surface上光标的位置需要乘以2才能正确,普通电脑上没有这个问题 /...为了接收 Tab 键,不是被切到其他控件,需要设置 KeyboardNavigation IsTabStopProperty 和 TabNavigationProperty 附加属性。...{ // 用于接收 Tab 按键,不是被切换焦点 KeyboardNavigation.IsTabStopProperty.OverrideMetadata

1.7K21

WPF入门到放弃(七)| 常用布局控件用法

添加一个测试窗口,将App.xaml StartupUri=" MainWindow.xaml" 改为StartupUri="test.xaml"。则运行时显示这个新建窗口。...Canvas:顶级布局控件,用于内容绝对定位 可以把Canvas比作一个坐标系,所有的元素通过设置坐标来决定其在坐标系位置.这个坐标系原点并不是在中央,而是位于它左上角,主要适用场合: 一经设计基本上不会再有改动布局...通过设置LastChildFill来禁用自动填充剩余空间 WrapPanel:按从左到右顺序位置定位子元素 在包含框边缘处将内容切换到下一行。...Border:在另一个元素四周绘制边框或背景 Border只能具有一个元素。若要显示多个子元素,需要将布局面板放在Border。...BorderBrush="BlueViolet" 设置边框颜色 BorderThickness="10" 设置边框线条粗细,Margin="20" 距离窗口左上右下距离前面的文章中有介绍。

1.7K20

【愚公系列】2023年10月 WPF控件专题 DockPanel控件详解

一、DockPanel控件详解 WPFDockPanel控件是一种面板控件,它可以将其控件沿着指定边缘对齐并填充整个可用空间。...当一个控件Dock属性被设置为Left或Right时,它会被放置在上一个已经在DockPanel设置了Dock属性控件左侧或右侧。...当控件Dock属性被设置为Top或Bottom时,它会被放置在上一个已经在DockPanel设置了Dock属性控件顶部或底部。...如果是 true,则最后一个元素将填充剩余空间。如果是 false,则最后一个元素将不会填充剩余空间。 Dock:指定元素在DockPanel位置。可以将元素靠左、靠右、靠上或靠下排列。...工具栏布局:DockPanel可以用来实现工具栏布局,例如将工具栏放在窗口顶部或左侧。 父子元素布局:DockPanel可以用来实现将元素固定在父元素某个位置

46200

在VisualStudio中提供运行时和设计时支持WPF本地化解决方案

我们可以创建这个实例,因为上面对内部构造函数调用来自同一个程序集中,不是直接来自XAML。 这样做一个限制是资源类必须是公共,因为我们不能使用公共方法返回一个内部类实例(这会导致编译错误)。...对于现有的安装程序,您只需要创建一个带有新区域设置名称文件夹,并将新正确命名资源DLL放入其中。重新启动应用程序,它就能列出系统可选择区域设置列表。 ?...但是,如果您希望本地化属性不是外部可访问,比如Label Content属性,那么解决方案就有点麻烦了。 ?...我理解,将UserControl作为窗口控件加载时问题是,设计器创建控件实例,然后将其添加到窗口中。运行时可用资源不存在,因为实例不是窗口中创建,因此上面的绑定失败,无法呈现控件。...因此,当在eventhandler重新获取值时,更新资源值是可用。或者,您可以确保在知道ODP更新后重新获取本地化后值,这没什么区别。 ?

1.9K20

WPF 程序如何移动焦点到其他控件

WPF 可以使用 UIElement.Focus() 将焦点设置到某个特定控件,也可以使用 TraversalRequest 仅仅移动焦点。本文介绍如何在 WPF 程序控制控件焦点。...但是需要注意,要使 Focus() 能够工作,这个元素必须满足两个条件: Focusable 设置为 true IsVisible 是 true TraversalRequest 如果你并不是将焦点设置到某个特定控件... WPF 有多个焦点范围(Focus Scope),按下 Tab 键切换焦点时候只会在当前焦点范围切焦点,不会跨范围。那么一旦跨范围切焦点时候,焦点会去哪里呢?答案是逻辑焦点。...一旦这个 Window 激活,那么这个窗口逻辑焦点就会成为键盘焦点,另一个窗口当中逻辑焦点保留,键盘焦点则丢失。...跨窗口/跨进程切换焦点 参见我另一篇博客: WPF 程序如何跨窗口/跨进程设置控件焦点 ---- 参考资料 winapi - Win32: C++: How do I re-focus on Parent

36030

WPF 全屏透明窗口

本文告诉大家如何在 WPF 做一个全屏透明窗口,和全屏透明窗口坑 使用下面代码就可以作出全屏透明窗口 public MainWindow() {...WindowState.Maximized; Background = Brushes.Transparent; Topmost = true; } 在 WPF...透明窗口会加上背景放到内存,尝试将上面程序在 2K 屏幕运行,将会看到大概需要 70M 内存。...如果屏幕分辨率更大,将会发现鼠标移动很慢,请看 【翻译】关于 WPF 透明窗口内存占用 另外会发现窗口其实和屏幕有一个像素,通过设置 ResizeMode="NoResize" 可以解决,因为这一个像素是用来拖动窗口...此外,设置 ResizeMode="NoResize" 可以解决: 17025 触摸bug 还原窗口再最大化,窗口出现偏移 切换屏幕,窗口出现偏移

69310
领券