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

WPF从其他窗口执行方法,控件不更新

WPF(Windows Presentation Foundation)是一种用于创建Windows应用程序的UI框架。在WPF中,可以通过多种方式从其他窗口执行方法并更新控件。

一种常见的方法是使用委托和事件。首先,在源窗口中定义一个委托和事件,用于触发需要执行的方法。然后,在目标窗口中订阅该事件,并在事件处理程序中执行相应的方法。在方法中,可以更新需要更新的控件。

以下是一个示例:

在源窗口中定义委托和事件:

代码语言:txt
复制
public delegate void UpdateControlDelegate();

public event UpdateControlDelegate UpdateControlEvent;

在源窗口中触发事件:

代码语言:txt
复制
private void TriggerUpdateControlEvent()
{
    UpdateControlEvent?.Invoke();
}

在目标窗口中订阅事件并更新控件:

代码语言:txt
复制
public TargetWindow()
{
    InitializeComponent();
    SourceWindow source = new SourceWindow();
    source.UpdateControlEvent += UpdateControl;
}

private void UpdateControl()
{
    // 更新需要更新的控件
    // 例如:label.Content = "更新后的内容";
}

另一种方法是使用消息机制。WPF提供了一个名为Messenger的消息传递库,可以在不同窗口之间发送和接收消息。通过发送消息,可以通知目标窗口执行相应的方法并更新控件。

以下是一个示例:

在源窗口中发送消息:

代码语言:txt
复制
Messenger.Default.Send(new UpdateControlMessage());

在目标窗口中接收消息并更新控件:

代码语言:txt
复制
public TargetWindow()
{
    InitializeComponent();
    Messenger.Default.Register<UpdateControlMessage>(this, UpdateControl);
}

private void UpdateControl(UpdateControlMessage message)
{
    // 更新需要更新的控件
    // 例如:label.Content = "更新后的内容";
}

以上是两种常见的方法,可以从其他窗口执行方法并更新控件。根据具体的需求和场景,可以选择适合的方法来实现。

关于WPF的更多信息和相关产品介绍,您可以参考腾讯云的官方文档:

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

相关·内容

WPF面试题-来自ChatGPT的解答

WPF应用程序中,Page和Window是两种不同的UI元素,它们有以下区别: 用途:Window用于创建独立的顶级窗口,通常用作应用程序的主窗口。它可以包含其他UI元素,如面板、控件等。...导航:Window通常涉及导航,它是一个独立的窗口,用户可以通过操作系统的窗口管理功能进行切换。...Dispatcher对象提供了Invoke和BeginInvoke方法,可以将操作调度到UI线程上执行,以确保UI元素的安全访问。 处理UI元素的更新:在WPF中,UI元素的更新必须在UI线程上进行。...通过Dispatcher对象的Invoke和BeginInvoke方法,可以将UI元素的更新操作调度到UI线程上执行,以避免线程访问错误。...在目标元素上,可以执行特定的操作或者触发其他事件。 冒泡事件是最内层的元素开始传递,逐级向外层元素传递的过程。在冒泡阶段,事件会最内层的元素开始,依次向上传递到根元素。

28530

WPF如何在子线程或其他类中操控控件

问题 一开始使用WPF界面的时候,会有这样的需求就是在后台更新控件,以完成列表更新,计时器,进度条等功能,但WPF这边架构限制,决定子线程是不安全的,如果创建子线程直接操作控件就会出错。...解决 首先可以说明,这里只要使用Dispatcher类来操作就可以了,使用Involke函数,后者提供一个简单的匿名方法,用于委托主线程更新控件。...要访问其他WPF表单中的控件,您必须将该控件声明为公共控件。...WPF控件的默认声明是公共的,但是您可以使用以下代码指定它: 之后,您可以在应用程序的所有活动窗口中搜索以找到具有此类控制功能的窗口...).textBox1.Text ="我另一个窗口更改了它"; } } 实例:C#通过事件跨类调用WPF窗口中的控件 xaml.cs文件: using System; using System.Timers

1.8K10

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

背景 关于WPF本地化问题有许多其他的文章,包括使用Locbaml本地化WPF应用程序(https://www.codeproject.com/KB/WPF/Article.aspx),其中介绍了对XAML...这篇文章中的第一种方法(不使用LocBaml.exe的目标本地化,https://www.codeproject.com/KB/WPF/Article.aspx)给了我很多启发,但为了在运行时自动更新元素...如果字符串参数匹配任何已定义的CultureInfo类型,CultureInfo.GetCultureInfo()方法将会失败。...我理解,将UserControl作为窗口的子控件加载时的问题是,设计器创建控件的实例,然后将其添加到窗口中。运行时可用的资源不存在,因为实例不是在窗口中创建的,因此上面的绑定失败,无法呈现控件。...限制 在本例中,我使用WPF绑定,这需要依赖属性来绑定。在其他情况下,您可能希望访问这些属性,但是添加绑定并不合适,也不容易实现。例如,当您希望直接代码访问本地化的值时。

1.9K20

.NET Core.NET5.NET6 开源项目汇总12:WPF组件库2

微软提供的WPF控件的功能很强大,但是样式漂亮,需要专业的美工设计样式或皮肤。圈子里总有无私奉献的大牛们分享既漂亮又好用的WPF组件库,下面收集了几款非常优秀的WPF开源组件。...它是SharpDevelop 4.x“Mirador”及更高版本中基于WPF的文本编辑器的名称。它也被用于ILSpy和许多其他项目。 ?...Xceed出品的WPF扩展工具包是创建下一代Windows应用程序的WPF控件、组件和实用程序的首选集合。...使用它来构建外观专业、现代且易于使用的WPF应用程序。它已经在这里、Codeplex和NuGet上下载了100多万次。 ? 包含以下控件 ? Plus版本中的其他控件和功能 ?...WPF业务套件中的其他控件和功能 ?

2.3K10

.Net5 WPF快速入门系列教程

3.控件、依赖项属性【控件体现于在窗口中可视化、可交互并实现某些行为。依赖属性在wpf主要扮演数据驱动中的重要角色,它能配合绑定一起实时数据更新UI显示、动画、自定义控件等。】...4.绑定【绑定顾名思义,是wpf最基础也是最重要的一环,是将我们获取到的数据和UI上的控件绑定起来利用数据的变化来更新界面所看到的内容。】 5.命令【命令表示应用程序任务,并且跟踪任务是否能够被执行。...然而,命令实际上包含执行应用程序任务的代码。】 6.MVVM模式【MVVM是一种开发模式,是一种开发标准。...7.资源、样式【1.WPF资源系统是一种保管一系列有用对象(如常用的画刷、样式和模板)的简单方法,从而使您可以更容易地重用这些对象。...9.模板【模板应用在View层,它的主要作用是修改控件的样式、交互、数据展示。】 10.线程【1.线程是一个可执行的路径,它可以独立于其他线程执行

81910

WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口

用于UI窗口绘制的可见窗口 WPF的消息机制(三)-WPF输入事件的来源 WPF的消息机制(四)-WPF中UI的更新 WPF内部的5个窗口 对于Windows系统来说,它是一个消息系统,消息系统的核心就是窗口...在这5个窗口中,只有一个是可见的,可以处理输入事件与用户交互,其他4个窗口都是不可见的,帮助WPF处理来自其他方面的消息。...第六步,执行DispatcherOperation.Invoke方法,Invoke方法的核心就是调用DispatcherOperation构造时传入的Delegate,也就是Dispatcher.BeginInvoke...最终这个Foo()方法就被执行了。 通过上面的六步过程,一次Dispatcher.BeginInvoke就被处理完成。...开发工具 ComponentOne Studio WPF 是专为桌面应用程序开发所准备的一整套控件包,崇尚优雅和创新,以“触控优先”为设计理念,内含轻量级高性能表格控件,和大量类型丰富的2D和3D图表控件

1.8K50

【愚公系列】2023年11月 WPF控件专题 2023秋招WPF高频面试题

还有其他控件可以容纳其他控件,例如 itemscontrols。 Itemscontrol 可以有多个文本框控件、标签控件等。 Shape: - 帮助我们创建简单的图形控件,如椭圆、线条、矩形等。...Command 对象包含要执行的功能。 这消除了命令定义和功能之间的直接联系,并促进了松散耦合。 当需要根据用户请求实现操作时,命令模式是处理对象的最佳模式。...WPF 控件 textbox 、 button 、 grids 以及可以 WPF 工具箱中想到的任何内容都继承自FrameworkElement类。...收集了窗口、导航页面、用户控件、资源文件、样式和主题、自定义工具和控件的所有用户界面元素。...主要区别在于,普通 .NET 属性的值是直接类中的私有成员 读取,而 DependencyProperty 的值在调用 GetValue( ) DependencyObject 继承的方法

40822

.Net5 WPF快速入门系列教程

3.控件、依赖项属性【控件体现于在窗口中可视化、可交互并实现某些行为。依赖属性在wpf主要扮演数据驱动中的重要角色,它能配合绑定一起实时数据更新UI显示、动画、自定义控件等。】...4.绑定【绑定顾名思义,是wpf最基础也是最重要的一环,是将我们获取到的数据和UI上的控件绑定起来利用数据的变化来更新界面所看到的内容。】 5.命令【命令表示应用程序任务,并且跟踪任务是否能够被执行。...然而,命令实际上包含执行应用程序任务的代码。】 6.MVVM模式【MVVM是一种开发模式,是一种开发标准。...7.资源、样式【1.WPF资源系统是一种保管一系列有用对象(如常用的画刷、样式和模板)的简单方法,从而使您可以更容易地重用这些对象。...9.模板【模板应用在View层,它的主要作用是修改控件的样式、交互、数据展示。】 10.线程【1.线程是一个可执行的路径,它可以独立于其他线程执行

1.4K30

WPF的消息机制(一)- 让应用程序动起来

(3)用于UI窗口绘制的可见窗口 (4)用于用户交互的可见窗口 WPF的消息机制(三)-WPF输入事件的来源 WPF的消息机制(四)-WPF中UI的更新 让应用程序动起来 谈到WPF的消息,首先应该知道...DispatcherObject派生的类型继承三个重要的成员:Dispatcher属性,CheckAccess(), VerifyAccess()方法。其中后面两个方法就是检验线程亲缘性的。...通过调用堆栈可以看出,蓝色的部分是启动了一个线程,VisualStudio在Host的进程当中运行当前应用程序;红色的部分是Application.Main函数开始执行,经过几个函数到达Dispatcher.Run...循环调用GetMessage方法当前线程的消息队列当中不停的获取消息,取出一个msg之后,交给TranslateAndDispatchMessage方法Dispatch到不同的窗口过程去处理。...开发工具 ComponentOne Studio WPF 是专为桌面应用程序开发所准备的一整套控件包,崇尚优雅和创新,以“触控优先”为设计理念,内含轻量级高性能表格控件,和大量类型丰富的2D和3D图表控件

1.3K90

WPF 使用 Composition API 做高性能渲染

,通过这个方法WPF 使用两个不同的渲染方法。...在 CompositionHost 创建了一个新的窗口,然后将这个窗口使用 HwndHost 显示在 WPF 窗口之上,也就是使用 CompositionHost 的控件将会显示在其他任何 WPF 控件的上面...,也就是在 CompositionHost 控件的 Bounds 范围内,是不能使用其他WPF 控件的。...这和在 WPF 中使用其他渲染方法窗口一样,这个技术也是在 WPF 中使用 WinForms 或 UWP 控件的技术 在 CompositionHost 的主要代码是 InitComposition...因为使用了 HwndHost 用了两个渲染方法,在使用 UWP 渲染方法的范围会在窗口的最上也就是 WPF 无法在这个范围放任何的像素,同时也存在焦点等问题。

1.9K20

WPF 渲染原理

但是这个代码只提供让窗口在哪里显示,如何显示就需要下面的代码 DirectX 这就是 WPF 渲染的最底层的库,可以渲染 WPF 的几乎所有控件,需要注意 WPF 使用的是 Dx9 或 Dx12... Dispatcher 拿到自定义的消息,就开始执行视觉树的对象,调用对应的绘制,这里是收集到绘制原语,也就是告诉显卡可以怎么画。...请看下面 桌面窗口管理 在 Windows 系统,很重要的就是 DWM(Desktop Window Manager)可以把窗口画到屏幕,并且支持窗口做半透明和其他的对其他窗口的视觉处理。...渲染需要经过消息循环和 Dispatcher 循环,也就是渲染的方法不是直接通过控件调用渲染。控件是通过发送消息经过消息循环再调用到控件的 OnRender 方法。...屏幕管理更新窗口让用户在屏幕可以看到、 关于渲染性能请看 WPF Drawing Performance 课件 WPF 渲染原理 参见: 一站式WPF–Window(一) - 周永恒 - 博客园 WPF

2.8K31

WPF基础之资源

WPF资源 WPF资源系统是一种保管一系列对象(如常用的画刷、样式或模版)的简单办法,从而使您更容易地复用这些对象。...WPF允许在代码中以及在标记中的各个位置定义资源(和特定的控件窗口一起定义,或在整个应用程序中定义)。资源具有如下优点。 高效。定义好资源可以在多个地方复用。 可维护性。易于修改。 适应性。...这意味着无论何时在WPF中改变画刷,所有使用该画刷的控件都会自动更新。静态资源和动态资源的区别在于静态资源只资源集合中获取对象一次,动态资源每次需要对象时都会重新资源集合中查找对象。...应用程序资源 窗口不是查找应用程序资源的最后一站,如果在控件其他容器中知道包含窗口或页面找不到指定的资源。WPF会继续查找为应用程序定义的资源。...资源字典只是xaml文档,除了存储希望使用的资源外,不做其他任何事情。

75631

浅谈window桌面GUI技术及图像渲染性能测试实践

数据需要经过: App->DX runtime->User mode driver->dxgkrnl->Kernel mode driver->GPU 在到达GPU之前,全都是在CPU上执行的,所以程序本身是无法获取渲染结果...Win32程序中,所有窗口控件都是一个窗口类的实例,都拥有一个窗口句柄,窗口对象属于内核对象,由Windows子系统来维护。...Windows子系统为标准控件定义了窗口类,并使用GDI来绘制这些标准控件。 Win32程序采用消息循环机制: ?...WPF程序 WPF控件不再是通过Win32 API来创建窗口,使用Win32 API并不能查找和操作WPF控件 WPF所有控件和动画都是使用DirectX 绘制 WPF控件直接支持MSAA,而是通过...测试解决方案应至少包括5个项目,其中前两个是和其他测试解决方案共享的。5个项目均为类库,不能直接执行。 AI.Robot为UI驱动框架。

3.4K30

WPF 获取元素(Visual)相对于屏幕设备的缩放比例,可用于清晰显示图片

更繁琐的是,我们的控件可能外面有一些其他控件做了 RenderTransform 进行了一些缩放,于是了解到屏幕像素单位就更不容易了。...本文将提供一套计算方法,帮助计算某个 WPF 控件相比于屏幕像素尺寸的缩放比例,用于进行屏幕像素级别的渲染控制。 ---- 一个 WPF 控件会经历哪些缩放?...如下图,我画了一个屏幕,屏幕里面有一个 WPF 窗口WPF 窗口里面有一个或者多个 ViewBox 或者设置了 RenderTransform 这样的缩放的控件,一层层嵌套下有我们的最终控件。...分别计算所有的缩放 从上面的图中,我们可以得知,有两种不同种类的缩放: 屏幕到 WPF 窗口的缩放 WPF 窗口内部的缩放 屏幕到 WPF 窗口的缩放 我们知道 WPF 的单位叫做 DIP 设备无关单位...实际上 WPF 提供了方法 TransformToAncestor 可以计算一个两个具有父子关系的控件的相对变换量。

44940

使用.NET Core 构建现代化的桌面应用

最简单的方法是创建一个运行 "dotnet new wpf" 或 "dotnet new winforms" 的空 csproj。...能够在不对计算机构成风险或引起“计算机腐烂”的情况下安装和卸载 开箱即用的自动更新 更容易分发,可以通过微软商店,企业自己的微软商店,文件共享,HTTP URL分发 Windows 10 版本 1903...开始,可以将 UWP XAML 控件直接添加到与窗口句柄 (HWND) 关联的 WPF、Windows 窗体或 C++ Win32 应用中的任何 UI 元素。...这意味着,你可以将最新的 UWP 功能(例如 Windows Ink 和支持 Fluent Design System 的控件完全集成到 Windows 以及桌面应用的其他显示表面中去。...虽然我们现在可以.NET Framework 调用UWP API,但仅适用于涉及UI的情况。

2.1K10

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

本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,底层开始开发的文本库的伙伴。...在开始之前,期望了解了文本库开发的基础知识 实现 本文的方法参考了 WPF 官方仓库的逻辑,可以在 WPF 仓库的 wpf\src\Microsoft.DotNet.Wpf\src\PresentationFramework...所用的 win32 的 API 重点是如下几个 ImmGetContext 获取输入法上下文,用于后续所有的其他函数调用 ImmAssociateContext 关联输入法和对应的窗口,让输入法了解在哪个窗口输入...为了让文本框可以做更多的定制,也需要 GetTextEditorLeftTop 方法,这个方法的返回值对大部分自定义的文本框控件来说,都应该是 0,0 点 在 IMESupporter 类型构造函数,期望传入文本框控件...为了接收 Tab 键,而不是被切到其他控件,需要设置 KeyboardNavigation 的 IsTabStopProperty 和 TabNavigationProperty 附加属性。

1.6K21

如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来

我们有很多的调试工具可以帮助我们查看 WPF 窗口中当前获得键盘焦点的元素。本文介绍监控当前键盘焦点元素的方法,并且提供一个不需要任何调试工具的自己绘制键盘焦点元素的方法。...当然,为了最好的显示效果,你需要将这个控件放到最顶层。 绘制并实时显示 WPF 程序中当前键盘焦点的元素 如果我们需要监听应用程序中所有窗口中的当前获得键盘焦点的元素怎么办呢?...于是,你需要我在另一篇博客中写的方法来监视整个 WPF 应用程序中的所有窗口: 如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI 里面有一段对 ApplicationWindowMonitor...} 于是,我们只需要在 OnActiveWindowChanged 事件中,将我面前面写的控件 KeyboardFocusView 原来的窗口中移除,然后放到新的窗口中即可监视新的窗口中的键盘焦点。...由于每一次的窗口激活状态的切换都会更新当前激活的窗口,所以,我们可以监听整个 WPF 应用程序中所有窗口中的键盘焦点。

38940

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

虽然屏幕 DPI 值已经更新,并且已向应用窗口发送了 Dpi Change 消息,但系统 DPI 值依然没变。应用必须处理 Dpi Change 消息才会正常渲染。...方法是:打开“设置” -> “系统” -> “显示器” -> “高级缩放设置”,在“高级缩放设置”上,打开“允许 Windows 尝试修复应用,使其模糊”。...and other frameworks hosted in WPF do not automatically scale 即原生 WPF 应用支持 DPI 缩放,在其他 UI 框架中的 WPF 也支持...DPI 缩放;但是 WPF 中嵌入的其他 UI 框架不支持自动 DPI 缩放。...不过部分控件不支持自动随屏幕 DPI 切换。 其他 UI 框架 原生 Win32 是支持最新 DPI 感知的,其他如 GDI/GDI+/MFC 等都不支持,除非开发者手工编写。

65350
领券