1、添加新项
2、在构造函数中加入
public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); Grid grid = null; String xamlFile = @"C:Userszgjsource eposWindowsFormsApp1 est.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:Userszgjsource eposWindowsFormsApp1 est.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例子。