- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 C# WPF 4.51 应用程序。据我所知,您不能绑定(bind)到属于 WPF WindowsFormsHost 控件的子对象的属性。 (如果我的假设有误,请告诉我如何去做):
在我的例子中,我有一个包含 WindowsFormsHost 控件的页面,其 Child 对象是一个 ScintillaNET 编辑器控件:
https://github.com/jacobslusser/ScintillaNET
<WindowsFormsHost x:Name="wfhScintillaTest"
Width="625"
Height="489"
Margin="206,98,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top">
<WindowsFormsHost.Child>
<sci:Scintilla x:Name="scintillaCtl" />
</WindowsFormsHost.Child>
</WindowsFormsHost>
子控件可以正常工作并显示。如果它是一个普通的 WPF 控件,我会将 Scintilla 编辑器控件的 Text 属性绑定(bind)到我的 ViewModel< 中的某个 string 属性/em>,因此我更新 Scintilla 编辑器控件的内容所需要做的就是更新 string 属性。
但由于我无法绑定(bind)到属于 WindowsFormsHost 子对象的属性,所以我正在寻找一种不完全笨拙或笨拙的策略/解决方案。有没有人以前遇到过这种情况并且有解决我的绑定(bind)/更新问题的合理策略?
最佳答案
此处的一个简单方法是您可以创建一些专用类来仅包含映射到 winforms 控件中的属性的附加属性。在这种情况下,我只是选择 Text
作为示例。使用这种方法,您仍然可以正常设置绑定(bind),但附加属性将在 WindowsFormsHost
上使用:
public static class WindowsFormsHostMap
{
public static readonly DependencyProperty TextProperty
= DependencyProperty.RegisterAttached("Text", typeof(string), typeof(WindowsFormsHostMap), new PropertyMetadata(propertyChanged));
public static string GetText(WindowsFormsHost o)
{
return (string)o.GetValue(TextProperty);
}
public static void SetText(WindowsFormsHost o, string value)
{
o.SetValue(TextProperty, value);
}
static void propertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var t = (sender as WindowsFormsHost).Child as Scintilla;
if(t != null) t.Text = Convert.ToString(e.NewValue);
}
}
XAML 中的用法:
<WindowsFormsHost x:Name="wfhScintillaTest"
Width="625"
Height="489"
Margin="206,98,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
local:WindowsFormsHostMap.Text="{Binding yourTextProp}"
>
<WindowsFormsHost.Child>
<sci:Scintilla x:Name="scintillaCtl"/>
</WindowsFormsHost.Child>
</WindowsFormsHost>
Child
当然应该是Scintilla
,否则您需要修改WindowsFormsHostMap
的代码。无论如何,这只是为了展示这个想法,您可以随时对其进行调整以使其变得更好。
请注意,上面的代码仅适用于一种方式绑定(bind)(从 View 模型到您的 winforms 控件)。如果您想要另一种方式,则需要为控件注册一些事件处理程序并将值更新回该处理程序中的附加属性。这样就相当复杂了。
关于c# - 在 C#/XAML 应用程序中无法绑定(bind)到属于 WindowsFormsHost 子对象的属性的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33074176/
看来 WindowsFormsHost 控件设置为显示在顶部。有什么方法可以更改其 z 顺序以允许同一窗口上的其他 WPF 控件在 WindowsFormsHost 控件顶部可见? 最佳答案 不幸的是
我在 WPF 应用程序中有一个 WinForms 控件。幸运的是,在 WPF 中,鼠标滚轮事件通常由鼠标光标下的控件处理……但如果它是 WinForms 控件,我必须先单击该控件才能为其提供键盘焦点。
好的,我不确定我是否理解这应该如何工作,但在我的应用程序中,我已将按键手势 (Ctrl+K) 绑定(bind)到 RoutedCommand。无论我在我的应用程序中关注的哪个位置,组合键都有效,除非我
我在 WPF 窗口内的 WindowsFormsHost 控件中嵌入了一个 SWF 对象。 我想在 swf 影片上添加一个工具栏。 我下面的代码片段的问题是,当新的子项被添加到主机控件时(或者电影被加
在我的 wpf 应用程序中,我正在尝试使用 Windows 窗体控件....但是我收到一个错误,即错误 找不到类型“WindowsFormsHost”。确认您没有缺少程序集引用并且所有引用的程序集都已
有没有办法延迟 WindowsFormsHost 的绘制?它托管在 WPF 中。 它承载一个 COM 对象,它是一个 ESRI ArcEngine AxTocControl。从视觉上看,它看起来像一个
我使用 WindowsFormsHost 控件在 WPF 浏览器应用程序中嵌入了一个 Windows 窗体应用程序,但窗体的大小总是有点短(大约 10 像素)。在调试过程中,我注意到表单的高度和宽度比
因此,我的 WPF 应用程序(托管 Dundas 图表)中有一个 WindowsFormsHost 控件,我想在其上放置一个 ContextMenu。 我可以成功地将 ContextMenu 附加到任
我正在尝试在 WPF 的 WindowsFormsHost 控件中托管 ILPanel。这是我的代码: XAML: 代
我在 WPF 弹出窗口中托管 windowsforms 控件。问题如下: 如果我使 StaysOpen=False 无法与 winform 控件交互。 StaysOpen 为 false 是必需的,因
因为 WPF 没有允许显示多个月份的月历,所以我尝试在 WindowsFormsHost 中使用经典的 WindowsForms MonthCalendar。在“普通”WPF 窗口中执行此操作效果很好
我有一个 WPF 窗口,它需要多个 WindowsFormHost 控件。我注意到,如果我像这样对控件进行建模,那么异常不会冒泡到表面,而是会默默地进行处理,即仅使用 SharpDevelop 的调试
我在 WPF WindowsFormsHost 中有 Winforms 控件。Winforms 控件是被动的,不能处理任何鼠标事件。鼠标事件应该像往常一样从 WPF 可视化树中最内部的 WPF 控件引
在我的 WPF 中,我有一个包含 WindowsFormsHost 的网格,它将承载一个 .exe。我的 .xaml 代码是: 还有我的客服
如何设置 z-index windowsformshost 它们并不总是位于 WPF 元素的顶部? 最佳答案 根据 MSDN (Layout Considerations for the Window
我有一个 WPF 应用程序,它使用 WindowsFormsHost 控件来承载 Windows.Forms 控件。 我试图实现 MouseWheel 事件 - 但似乎 MouseWheel 事件从未
我有一个 View 模型,我在其中以这种方式创建我的窗口窗体: System.Windows.Forms.DataVisualization.Charting.Chart chart = new Sy
在 WPF 应用程序中,我创建了 WindowsFormsHost 并想在其中插入一个包含 COM/Activex 的 Form控制。但后来我得到: A first chance exception
我正在使用以下方法将 WINFORM 图表添加到我的 WPF 项目中 System.Windows.Forms.Integration.WindowsFormsHost 我正在尝试解决“领空”呈现问
所以我遇到了一个奇怪的错误...我按照一些步骤在我的 WPF C# 应用程序中创建了一个 CircularProgressBar。它在我的台式机上运行良好,但在我的笔记本电脑上运行不正常。 我创建了一
我是一名优秀的程序员,十分优秀!