Tag: wpf

从WPF中托管的WinForms控件创建表单 – 未设置所有者

脚本 我有以下场景(我已将其剥离为示例应用程序): 带有窗口( MainWindow )的WPF应用程序,托管WinForms UserControl( UserControl1 )。 该控件在后面的代码中动态添加到WindowsFormsHost UserControl1有一个打开表单的按钮( Form1 ) 它使用form1.Show(this) 。 问题是: Form1的.Owner属性为null。 在实际应用程序中,有些工作涉及.Owner属性,这意味着我不能忽略这个问题。 当然,理想情况下,这里没有任何依赖性。 在实际应用程序中,我无法控制此代码的WinForms端。 我们的WPF应用程序正在托管另一个团队的WinForms控件。 笔记: 当我使用WinForms主机时, .Owner属性设置正确。 UserControl1以其他所有方式托管 – 在实际应用程序中,其他一切工作正常,只是由用户控件打开的表单没有合适的所有者。 我能理解为什么这里有问题,但我希望我的下一个问题的答案可能是’是’! 有什么方法可以通过在等式的WPF方面进行更改来实现这一点吗? 如果做不到,可以在WinForms方面做任何事情吗? (这可能超出了我可以在那里实现一些变化的可能性……) 示例代码 这是我的示例应用程序中的代码。 首先是WPF方面: public partial class MainWindow : Window { private WindowsFormsHost host; public MainWindow() { InitializeComponent(); } private void btnAdd_Click(object sender, RoutedEventArgs e) { […]

如何在不丢失WPF绑定的情况下更改TextBox.Text?

在WPF应用程序中,我正在创建一个设置窗口来自定义键盘快捷方式。 在文本框中,我处理KeyDown事件并将Key事件转换为人类可读的forms(以及我想要获取数据的forms)。 文本框声明如下 在事件处理程序中,我尝试使用它们 (sender as TextBox).Text = “…”; 和 (sender as TextBox).Clear(); (sender as TextBox).AppendText(“…”); 在这两种情况下,绑定回viewmodel都不起作用,viewmodel仍然包含旧数据并且不会更新。 在另一个方向(从视图模型到文本框)绑定工作正常。 有没有办法可以在不使用绑定的情况下从代码编辑TextBox.Text? 或者我的流程中的其他地方是否有错误?

如果在构造函数中设置DataContext,那么在调用InitializeComponent()之前或之后设置它是否重要?

我有一个WPF窗口,在它的构造函数中有一些参数。 然后我使用这些构造函数来设置窗口的状态。 该构造函数进程的一部分是实例化我的视图模型类,然后将其设置为windows DataContext 。 我的问题是,在调用InitializeComponent()之前或之后,我应该何时将DataContext设置为等于我的视图模型对象? 我问,因为如果我事先设置它,那么我需要手动启动窗口初始化后执行的代码,因为某些事件应该在分配或重新分配DataContext时触发。 如果我在调用InitializeComponent()之后设置DataContext ,那么我的假设不应该存在任何绑定问题,但我想在最后调用以这种方式连接我的窗口之前询问有关此问题的建议。 如果在调用InitializeComponent()之后设置DataContext ,我可能会遗漏一些可能会回来困扰我的东西吗?

HttpWebRequest.BeginGetResponse

我需要向Web资源发出异步请求并使用此页面中的示例( 链接到完整示例 ): HttpWebRequest myHttpWebRequest= (HttpWebRequest)WebRequest.Create(“http://www.contoso.com”); RequestState myRequestState = new RequestState(); myRequestState.request = myHttpWebRequest; // Start the asynchronous request. IAsyncResult result= (IAsyncResult) myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState); 但是当我测试应用程序时,执行冻结(在2-3秒内)在此代码的最后一行(我可以使用调试器观察它)。 为什么? 这是我的错误还是函数的标准行为?

新窗口后程序不会停止

也许是C#,WPF,.NET 4.0的一个愚蠢的问题: 如果我在窗口派生类上执行新操作并且不在此窗口上调用ShowDialog,则我的程序在关闭时不再关闭。 例: Window d = new Window(); //d.ShowDialog(); 为什么会这样? 我不想显示窗口,我只想将此对象用于某些目的。 那么为了让我的程序在之后关闭,我该怎么办呢?

如何在源为https uri时播放wpf MediaElement

在wpf独立应用程序(.exe)中,我在MainWindow中包含了一个MediaElement 从后面的代码我将其Source设置为任何https Uri: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var source = new Uri(“https://stream_which_can_be_opened_with_windows_media_player.com”, UriKind.Absolute); Player.Source = source; Player.Play(); } } 调用Play()方法时,抛出NullReferenceException而不是播放媒体内容。 初始化MediaElement ,从Play()方法抛出NullReferenceException ,见下文。 可以在Windows Media Player(文件 – >打开URL)中打开video的相同Uri。 问题似乎在MediaPlayerState.OpenMedia方法( MediaElement内部使用的对象)中,该方法尝试检查从SecurityHelper.ExtractUriForClickOnceDeployedApp检索到的appDeploymentUri是否具有HTTPS方案。 该应用程序未使用ClickOnce部署(它具有独立安装程序)且appDeploymentUri为null,因此为NullReferenceException 。 这是来自PresentationFramework.dll,System.Windows.Media.MediaPlayerState.OpenMedia if (SecurityHelper.AreStringTypesEqual(uriToOpen.Scheme, Uri.UriSchemeHttps)) { // target is HTTPS. Then, elevate ONLY if we are NOT […]

是否可以单击按钮而不会失去对TextBox的关注?

我正在尝试在C#WPF项目中开发一个触摸屏键盘控件,当TextBox获得焦点时它将是可见的,并且在TextBox失去焦点时隐藏。 我见过的触摸屏键盘项目是通过将键盘定义为新窗口而不是控件来实现的。 对于我的应用程序,我真的希望将键盘作为主应用程序窗口中的控件。 有没有办法允许单击按钮(在键盘控件上)而不会导致TextBox失去焦点? 理想情况下,我想在克拉的当前位置放置一个角色。

如何知道ComboBox中何时“重新选择”某个值?

我正在使用ComboBox将文本模板插入到RichEdit控件中(模板的名称位于ComboBox的选项列表中。) 除非用户再次在列表中选择相同的值,否则一切都很有效。 然后SelectionChanged没有触发。 根据事件的名称(选择更改 ),这是有道理的,但我需要知道该值已重新选择,因此我可以再次插入它。 有没有办法知道从ComboBox中重新选择了一个项目? (或者更好的控制使用?) 我尝试使用DropDownClosed事件,但即使没有重新选择该项,也会触发。 (他们打开下拉菜单然后点击另一个控件。)

如果字体不支持符号,如何在WPF文本框中插入版权,商标,服务标记等

我们有一个WPF应用程序,显示包含各种公司符号的文本; 如商标,注册商标,版权和服务标志。 数据库包含一些包含标准公司符号的字段。 最初,数据标记如下: Example Corp(TM) or Example Plan (SM) 我们可以轻松地将占位符更改为各自的Unicode等价物; 实际上在大多数情况下都有。 我们遇到的问题是应用程序使用的字体不支持服务标记符号(它只是一个上标的SM )。 有可能我们无法替换字体或编辑它。 字段可以是带有符号末尾的简单产品名称,也可以是带有0次或更多次符号的长描述。 我们将TextBoxes或Labels直接绑定到ViewModel和/或业务对象(通常通过DataTemplates)。 应用程序中的所有数据都是只读的。 所以,假设我们必须通过代码解决这个问题(在C#和WPF中),我的选择是什么?

这个事件处理程序代码会导致内存泄漏吗?

假设我派生了一个WPF控件,例如TextBox,我重写其中一个On-方法,例如OnInitialized 假设我这样做了: this.Initialized += delegate { }; 如果包含此控件的窗口关闭 – 如果没有其他操作,这会导致内存泄漏吗? 如果这确实导致内存泄漏,那么实现Finalizer是否是一个充分的,最小的补救措施?