8,756
社区成员




private void ControlTypeSelectingBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
Type type = ControlTypeSelectingBox.SelectedItem as Type;
if (type == null)
throw new ArgumentNullException("Type is null");
ConstructorInfo info = type.GetConstructor(System.Type.EmptyTypes);
Control control = info.Invoke(null) as Control;
Window window = control as Window;
//注意,下面必须要有打开窗口或者把控件放入grid的操作,这样才能让下面的template正确显示出来
if (window != null)
{
window.WindowState = System.Windows.WindowState.Minimized;
window.ShowInTaskbar = false;
window.Show();
}
else
{
control.Visibility = Visibility.Collapsed;
grid.Children.Add(control);
}
ControlTemplate template = control.Template;
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
StringBuilder strbuilder = new StringBuilder();
XmlWriter writer = XmlWriter.Create(strbuilder, settings);
XamlWriter.Save(template, writer);
txtTemplateBrowser.Text = strbuilder.ToString();
if (window == null)
//TODO:为什么这里手动关闭以后无法完整关闭窗口?
grid.Children.Remove(control);
else
{
window.Close();
window = null;
}
}
catch (Exception ex)
{
txtTemplateBrowser.Text = "<< Error generating template:" + ex.Message + ">>";
}
}
protected override void OnClosed(EventArgs e)
{
var collections = Application.Current.Windows;
foreach (Window window in collections)
{
if (window != this)
window.Close();
}
base.OnClosed(e);
}