Winform中使用WPF控件并动态读取Xaml
1、添加新项
2、在构造函数中加入
public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); Grid grid = null; String xamlFile = @"C:\Users\zgj\source\repos\WindowsFormsApp1\test.xaml"; using (FileStream fs = new FileStream(xamlFile, FileMode.Open)) { grid = (Grid)XamlReader.Load(fs); } grid1.Children.Add(grid); } }
3、test.xaml内容
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel x:Name="test_panel"> <Button x:Name="but1" Height="25" Width="60">but1</Button> <Button x:Name="but2" Height="25" Width="60">but2</Button> </StackPanel> </Grid>
4、将usercontrol拖到winform窗体上即可显示
5、如果test.xaml的根节点为window,需要分离,注意加黑部分。
/// <summary> /// UserControl1.xaml 的交互逻辑 /// </summary> public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); Window window = null; String xamlFile = @"C:\Users\zgj\source\repos\WindowsFormsApp1\test.xaml"; using (FileStream fs = new FileStream(xamlFile, FileMode.Open)) { window = (Window)XamlReader.Load(fs); } Grid grid = (Grid)window.Content; DependencyObject parent = grid.Parent; if (parent != null) { parent.SetValue(ContentPresenter.ContentProperty, null); } grid1.Children.Add(grid); } }
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="test" Height="300" Width="300"> <Grid> <StackPanel x:Name="test_panel"> <Button x:Name="but1" Height="25" Width="60">but1</Button> <Button x:Name="but2" Height="25" Width="60">but2</Button> </StackPanel> </Grid> </Window>
源程序在QQ群:616945527,winform加载WPF例子。
本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。