在WPF中使用虚拟控件

时间:2016-09-02 08:57:48

标签: c# wpf

我需要在Panel中动态生成控件,但控件非常复杂,我想使用已经存在的控件并在Panel中复制它。

我尝试过使用XamlWriter方法:

string saved = XamlWriter.Save(booksWindow.DummyBook);
StringReader sReader = new StringReader(saved);
XmlReader xmlReader = XmlReader.Create(sReader);
Grid newgrid = (Grid)XamlReader.Load(xmlReader);
newgrid.Visibility = Visibility.Visible; //initial control is Collapsed
booksWindow.BooksWrapper.Children.Add(newgrid);
return true;

这会导致新控件也以初始控件命名,据我所知,这可能会在以后出现一些问题。真的吗?如果是这样,有没有解决方法呢?

1 个答案:

答案 0 :(得分:0)

具有相同Name属性的网格控件应该不是问题。来自Names in XAML for XamlReader.Load

  

您可以在属于Load的输入的元素上指定Name或x:Name。但是,创建的任何此类名称都将位于离散的XAML名称范围中,该名称范围仅扩展到提供的XAML输入中的根。如果您调用Load并随后将创建的对象添加到主对象树,则此考虑将影响您调用FindName的方式,以及您应该调用它的对象范围。

基本上这意味着您不能使用Name属性来定位Grid控件以进行绑定或其他目的,这些目的看起来不像您需要做的事情。