C# Winforms-WPF 互操作

标签 c# wpf winforms winforms-interop

目前我有一个依赖透明效果的 Winforms 应用程序。然而,事实证明,这绝对是过去的痛苦!我正在学习的 Winforms 并不能很好地处理透明度。

我想知道使用 WPF 组件来实现透明位并使用 winforms 来实现其余部分是否会更容易(请注意,虽然我想将整个应用程序移至 WPF,但这并不可行!)。我对 WPF 几乎一无所知,这也是我来这里的原因!我正在考虑的是:

1) 在 Winforms 用户控件中托管 WPF 组件,例如WPF 控件示例:

<UserControl x:Class="WindowsFormsApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid>
         <Rectangle Name="rectangle1" Stroke="White" Fill="Black" RadiusX="10" RadiusY="10" Opacity="0.7" />
        <Rectangle Margin="57,101,43,99" Name="dialog" Stroke="Gray" Fill="White" RadiusX="10" RadiusY="10" />
    </Grid>
</UserControl>

2) 在 WPF 控件的白色矩形(对话框)内托管 Winforms 用户控件(内容)。 3) 允许内容(Winforms 用户控件)调用 WPF-Control 父级上的代码。

首先要做的事情...

  • 这是合理的做法还是我找错了对象?
  • 可以通过更简单的方式实现这一目标吗?
  • 有人可以帮我吗? (我们将不胜感激地收到示例代码!)
  • 最后...是否有任何在线资源可以帮助我 a) 学习 WPF 和 b) 变得更加自给自足?

最佳答案

这当然是可能的,而且我认为您是对的,这将是实现透明度的最简单方法。

我自己没试过,but according to this article on CodeProject ,应该很简单。您应该使用 ElementHost control托管您的 WPF 内容。

在 WinForms 控件中托管 WPF 是一种受支持的方案,是框架中内置的一项功能。所以这样做应该没有问题。还有一个 WPF 组件用于反其道而行之,在 WPF 应用程序中托管 WinForms。

关于C# Winforms-WPF 互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/936134/

相关文章:

c# - Linq 分组和嵌套分组

c# - 在大型 WPF 项目中使用大型 WinForms 项目的一部分

c# - 在 C# 中关闭除主菜单之外的所有打开的窗体

C# 自定义组合框 - 下拉位置

c# - Android 上的 Xamarin Profiler 错误(运行时太旧)

c# - MSChart 如何更改一系列破折号之间的间距

c# - ListView-Binding 中 ObservableCollection 的过滤和排序

wpf - 是否以及如何使用 MVVM

c# - 当更新 ObservableCollection 中的项目时更新 ItemsControl

wpf - 绑定(bind)更新时播放声音