一、字符串形式加载xaml控件
private void button_Clilk(object sender, RoutedEventArgs e)
{
string buttonXAML = "<Button xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'"+
" Content=\"我是动态加载的继续加载\" Margin=\"10\" Foreground=\"Red\"></Button>";
Button btnRed = (Button)System.Windows.Markup.XamlReader.Load(buttonXAML);
btnRed.Click+=btn_Click;
sp1.Children.Add(btnRed);
}
按下button_Clilk事件 加载一个新的button控件 btnRed
二、路径形式加载xaml控件
private void btn_Click(object sender, RoutedEventArgs e)
{
Rectangle rectangle = (Rectangle)LoadXaml("/动态加载xaml;component/Rectangle.xaml");
sp1.Children.Add(rectangle);
}
使用上面动态加载的控件btnRed的btn_Click事件调用LoadXaml方法动态加载自定义控件Rectangle
自定义的一个加载xaml控件的方法
static object LoadXaml(string File)
{
StreamResourceInfo sri = Application.GetResourceStream(new Uri(file, UriKind.Relative));
if (sri != null)
{
using (StreamReader sr = new StreamReader(sri.Stream))
{
return XamlReader.Load(sr.ReadToEnd());
}
}
return null;
}
注意Rectangle控件的生成操作 改为Resource
效果如下图: