如何将一个 .net 框架 WPFControl 或一个 .net5 WPFControl 导入到新的 .net5 Winform 中?

Jiale Xue - MSFT 38,931 信誉分 Microsoft 供应商
2024-03-26T08:22:13.4033333+00:00

我尝试在.net5 WPF中使用.net框架WPFUserControl(当然也是.net框架WPF),以及如何将此控件使用到我的.NET5 Winform?我想。NET5 Winform 不能再使用 ElementHost了。

Note:此问题总结整理于: How Can I Import one .net framework WPFControl or one .net5 WPFControl into The new .net5 Winform?

Windows 窗体
Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
108 个问题
Windows Presentation Foundation
Windows Presentation Foundation
.NET Framework 的一部分,它提供统一的编程模型,用于在 Windows 上构建业务线桌面应用程序。
76 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 44,631 信誉分 Microsoft 供应商
    2024-03-26T11:22:28.5466667+00:00

    否,可以在 WinForm 中使用 在 中承载 WPF 控件。Net5,但您需要使用较新版本的 2019。我测试了一个.Net5 WinForm 项目,用于在 中承载 WPF DataGrid。 以下是我的步骤和代码: 第 1 步: 创建一个 .Net5 Winform 项目名为 WPNet5,并将其设为 .csproj,如下所示:ElementHostVisual Studio Enterprise 2019 Version 16.8.1

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">  
      
      <PropertyGroup>  
        <OutputType>WinExe</OutputType>  
        <TargetFramework>net5.0-windows</TargetFramework>  
        <UseWindowsForms>true</UseWindowsForms>  
        <UseWPF>true</UseWPF>  
      </PropertyGroup>  
      
    </Project>  
    

    步骤2: 添加名为WPFControls 46075-1.png

    步骤3: WPFControls.xaml 的代码

     <Grid>  
            <DataGrid x:Name="dataGrid" ItemsSource="{Binding }" AutoGenerateColumns="False"  SelectionMode="Extended" SelectionUnit="CellOrRowHeader" >  
                <DataGrid.Columns>  
                    <DataGridTextColumn Header="Name" Width="80" Binding="{Binding Name}"/>  
                    <DataGridTextColumn Header="Age" Width="50" Binding="{Binding Age}" />  
                    <DataGridHyperlinkColumn Header="Email" Width="150"   Binding="{Binding Email}"/>  
                </DataGrid.Columns>  
            </DataGrid>  
        </Grid>  
    

    WPFControls.cs

     public partial class WPFControls : UserControl  
            {  
                public WPFControls()  
                {  
                    InitializeComponent();  
                    ObservableCollection<Member> memberData = new ObservableCollection<Member>();  
                    Random radom = new Random();  
                    for (int i = 1; i < 20; i++)  
                    {  
                        Member men = new Member();  
                        men.Age = radom.Next(100).ToString();  
                        men.Name = "JOE" + i.ToString();  
                        men.Email = new Uri("mailto:JOE" + i.ToString() + "+@school.com");  
                        memberData.Add(men);  
                    }  
                    dataGrid.DataContext = memberData;  
                }  
          
            }  
          
            public class Member  
            {  
                public string Name { get; set; }  
                public string Age { get; set; }  
                public Uri Email { get; set; }  
            }  
    

    步骤4: Form1.cs代码:

     public partial class Form1 : Form  
        {  
            private ElementHost _elemHost = new ElementHost();  
            private WPFControls _WPFDataGrid = new WPFControls();   
            public Form1()  
            {  
                InitializeComponent();  
                _elemHost.Location = new Point(10, 10);  
                _elemHost.Child = _WPFDataGrid;   
                _elemHost.Width = 400;  
                _elemHost.Height = 300;  
                this.Controls.Add(_elemHost);    
            }  
      
        }  
    

    骤5: 运行并获取结果图片: 46076-2.png


    如果回复有帮助,请点击“接受答案”并点赞。 注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助