|
|
@ -17,12 +17,9 @@ |
|
|
using System; |
|
|
using System; |
|
|
using System.Collections.Generic; |
|
|
using System.Collections.Generic; |
|
|
using System.Linq; |
|
|
using System.Linq; |
|
|
using System.Text; |
|
|
|
|
|
using System.Windows; |
|
|
|
|
|
using System.Collections.ObjectModel; |
|
|
using System.Collections.ObjectModel; |
|
|
using System.Windows.Markup; |
|
|
using System.Windows.Markup; |
|
|
using System.Xml.Serialization; |
|
|
using System.Xml.Serialization; |
|
|
using Standard; |
|
|
|
|
|
using System.Xml; |
|
|
using System.Xml; |
|
|
using System.Xml.Schema; |
|
|
using System.Xml.Schema; |
|
|
|
|
|
|
|
|
@ -334,7 +331,7 @@ namespace Xceed.Wpf.AvalonDock.Layout |
|
|
|
|
|
|
|
|
#region ActiveContent
|
|
|
#region ActiveContent
|
|
|
|
|
|
|
|
|
[field:NonSerialized] |
|
|
[field: NonSerialized] |
|
|
private WeakReference _activeContent = null; |
|
|
private WeakReference _activeContent = null; |
|
|
private bool _activeContentSet = false; |
|
|
private bool _activeContentSet = false; |
|
|
|
|
|
|
|
|
@ -662,288 +659,283 @@ namespace Xceed.Wpf.AvalonDock.Layout |
|
|
|
|
|
|
|
|
public event EventHandler<LayoutElementEventArgs> ElementRemoved; |
|
|
public event EventHandler<LayoutElementEventArgs> ElementRemoved; |
|
|
|
|
|
|
|
|
#endregion
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
public XmlSchema GetSchema() |
|
|
public XmlSchema GetSchema() |
|
|
{ |
|
|
{ |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void ReadXml( XmlReader reader ) |
|
|
public void ReadXml(XmlReader reader) |
|
|
{ |
|
|
{ |
|
|
reader.MoveToContent(); |
|
|
reader.MoveToContent(); |
|
|
if( reader.IsEmptyElement ) |
|
|
if (reader.IsEmptyElement) |
|
|
{ |
|
|
{ |
|
|
reader.Read(); |
|
|
reader.Read(); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var layoutPanelElements = ReadRootPanel( reader ); |
|
|
var layoutPanelElements = ReadRootPanel(reader); |
|
|
if( layoutPanelElements != null ) |
|
|
if (layoutPanelElements != null) |
|
|
{ |
|
|
|
|
|
//Create the RootPanel with the first child
|
|
|
|
|
|
RootPanel = new LayoutPanel( layoutPanelElements.First() ); |
|
|
|
|
|
//Add all children to RootPanel
|
|
|
|
|
|
for( int i = 1; i < layoutPanelElements.Count; ++i ) |
|
|
|
|
|
{ |
|
|
{ |
|
|
RootPanel.Children.Add( layoutPanelElements[ i ] ); |
|
|
//Create the RootPanel with the first child
|
|
|
|
|
|
RootPanel = new LayoutPanel(layoutPanelElements.First()); |
|
|
|
|
|
//Add all children to RootPanel
|
|
|
|
|
|
for (int i = 1; i < layoutPanelElements.Count; ++i) |
|
|
|
|
|
{ |
|
|
|
|
|
RootPanel.Children.Add(layoutPanelElements[i]); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TopSide = ( LayoutAnchorSide )ReadElement( reader ); |
|
|
TopSide = GetLayoutAnchorSide(reader); |
|
|
if( TopSide != null ) |
|
|
RightSide = GetLayoutAnchorSide(reader); |
|
|
{ |
|
|
LeftSide = GetLayoutAnchorSide(reader); |
|
|
TopSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); |
|
|
BottomSide = GetLayoutAnchorSide(reader); |
|
|
reader.Read(); |
|
|
|
|
|
} |
|
|
FloatingWindows.Clear(); |
|
|
RightSide = ( LayoutAnchorSide )ReadElement( reader ); |
|
|
var floatingWindows = ReadElementList(reader); |
|
|
if( RightSide != null ) |
|
|
foreach (var floatingWindow in floatingWindows) |
|
|
{ |
|
|
{ |
|
|
RightSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); |
|
|
FloatingWindows.Add((LayoutFloatingWindow)floatingWindow); |
|
|
reader.Read(); |
|
|
} |
|
|
} |
|
|
|
|
|
LeftSide = ( LayoutAnchorSide )ReadElement( reader ); |
|
|
|
|
|
if( LeftSide != null ) |
|
|
|
|
|
{ |
|
|
|
|
|
LeftSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); |
|
|
|
|
|
reader.Read(); |
|
|
|
|
|
} |
|
|
|
|
|
BottomSide = ( LayoutAnchorSide )ReadElement( reader ); |
|
|
|
|
|
if( BottomSide != null ) |
|
|
|
|
|
{ |
|
|
|
|
|
BottomSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); |
|
|
|
|
|
reader.Read(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
FloatingWindows.Clear(); |
|
|
Hidden.Clear(); |
|
|
var floatingWindows = ReadElementList( reader ); |
|
|
var hidden = ReadElementList(reader); |
|
|
foreach( var floatingWindow in floatingWindows ) |
|
|
foreach (var hiddenObject in hidden) |
|
|
{ |
|
|
{ |
|
|
FloatingWindows.Add( ( LayoutFloatingWindow )floatingWindow ); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Hidden.Clear(); |
|
|
Hidden.Add((LayoutAnchorable)hiddenObject); |
|
|
var hidden = ReadElementList( reader ); |
|
|
} |
|
|
foreach( var hiddenObject in hidden ) |
|
|
|
|
|
{ |
|
|
|
|
|
Hidden.Add( ( LayoutAnchorable )hiddenObject ); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private List<ILayoutPanelElement> ReadRootPanel( XmlReader reader ) |
|
|
private LayoutAnchorSide GetLayoutAnchorSide(XmlReader reader) |
|
|
{ |
|
|
{ |
|
|
var result = new List<ILayoutPanelElement>(); |
|
|
var side = (LayoutAnchorSide)ReadElement(reader); |
|
|
|
|
|
if (side != null) |
|
|
|
|
|
{ |
|
|
|
|
|
side.Children.Add((LayoutAnchorGroup)ReadElement(reader)); |
|
|
|
|
|
reader.Read(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
var startElementName = reader.LocalName; |
|
|
return side ?? new LayoutAnchorSide(); |
|
|
reader.Read(); |
|
|
} |
|
|
if( reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement) ) |
|
|
|
|
|
{ |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
while( reader.NodeType == XmlNodeType.Whitespace ) |
|
|
private List<ILayoutPanelElement> ReadRootPanel(XmlReader reader) |
|
|
{ |
|
|
{ |
|
|
reader.Read(); |
|
|
var result = new List<ILayoutPanelElement>(); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if( reader.LocalName.Equals("RootPanel")) |
|
|
var startElementName = reader.LocalName; |
|
|
{ |
|
|
|
|
|
reader.Read(); |
|
|
reader.Read(); |
|
|
|
|
|
if (reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement)) |
|
|
|
|
|
{ |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
while( true ) |
|
|
while (reader.NodeType == XmlNodeType.Whitespace) |
|
|
{ |
|
|
{ |
|
|
//Read all RootPanel children
|
|
|
reader.Read(); |
|
|
var element = ReadElement( reader ) as ILayoutPanelElement; |
|
|
|
|
|
if( element != null ) |
|
|
|
|
|
{ |
|
|
|
|
|
result.Add( element ); |
|
|
|
|
|
} |
|
|
|
|
|
else if( reader.NodeType == XmlNodeType.EndElement ) |
|
|
|
|
|
{ |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
reader.ReadEndElement(); |
|
|
if (reader.LocalName.Equals("RootPanel")) |
|
|
|
|
|
{ |
|
|
|
|
|
reader.Read(); |
|
|
|
|
|
|
|
|
return result; |
|
|
while (true) |
|
|
|
|
|
{ |
|
|
|
|
|
//Read all RootPanel children
|
|
|
|
|
|
var element = ReadElement(reader) as ILayoutPanelElement; |
|
|
|
|
|
if (element != null) |
|
|
|
|
|
{ |
|
|
|
|
|
result.Add(element); |
|
|
|
|
|
} |
|
|
|
|
|
else if (reader.NodeType == XmlNodeType.EndElement) |
|
|
|
|
|
{ |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
reader.ReadEndElement(); |
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private List<object> ReadElementList( XmlReader reader ) |
|
|
private List<object> ReadElementList(XmlReader reader) |
|
|
{ |
|
|
{ |
|
|
var resultList = new List<object>(); |
|
|
var resultList = new List<object>(); |
|
|
|
|
|
|
|
|
if( reader.IsEmptyElement ) |
|
|
if (reader.IsEmptyElement) |
|
|
{ |
|
|
{ |
|
|
reader.Read(); |
|
|
reader.Read(); |
|
|
return resultList; |
|
|
return resultList; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var startElementName = reader.LocalName; |
|
|
|
|
|
reader.Read(); |
|
|
|
|
|
if( reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement) ) |
|
|
|
|
|
{ |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
while( reader.NodeType == XmlNodeType.Whitespace ) |
|
|
var startElementName = reader.LocalName; |
|
|
{ |
|
|
|
|
|
reader.Read(); |
|
|
reader.Read(); |
|
|
} |
|
|
if (reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement)) |
|
|
|
|
|
{ |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
while( true ) |
|
|
while (reader.NodeType == XmlNodeType.Whitespace) |
|
|
{ |
|
|
|
|
|
var result = ReadElement( reader ) as LayoutFloatingWindow; |
|
|
|
|
|
if( result == null ) |
|
|
|
|
|
{ |
|
|
{ |
|
|
break; |
|
|
reader.Read(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
resultList.Add( result ); |
|
|
while (true) |
|
|
} |
|
|
{ |
|
|
|
|
|
var result = ReadElement(reader) as LayoutFloatingWindow; |
|
|
|
|
|
if (result == null) |
|
|
|
|
|
{ |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
reader.ReadEndElement(); |
|
|
resultList.Add(result); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
reader.ReadEndElement(); |
|
|
|
|
|
|
|
|
return resultList; |
|
|
return resultList; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private object ReadElement( XmlReader reader ) |
|
|
private object ReadElement(XmlReader reader) |
|
|
{ |
|
|
{ |
|
|
if( reader.NodeType == XmlNodeType.EndElement ) |
|
|
if (reader.NodeType == XmlNodeType.EndElement) |
|
|
{ |
|
|
{ |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
while( reader.NodeType == XmlNodeType.Whitespace ) |
|
|
while (reader.NodeType == XmlNodeType.Whitespace) |
|
|
{ |
|
|
{ |
|
|
reader.Read(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
XmlSerializer serializer; |
|
|
|
|
|
switch( reader.LocalName ) |
|
|
|
|
|
{ |
|
|
|
|
|
case "LayoutAnchorablePaneGroup": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutAnchorablePaneGroup ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutAnchorablePane": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutAnchorablePane ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutAnchorable": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutAnchorable ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutDocumentPaneGroup": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutDocumentPaneGroup ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutDocumentPane": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutDocumentPane ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutDocument": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutDocument ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutAnchorGroup": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutAnchorGroup ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutPanel": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutPanel ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutDocumentFloatingWindow": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutDocumentFloatingWindow ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LayoutAnchorableFloatingWindow": |
|
|
|
|
|
serializer = new XmlSerializer( typeof( LayoutAnchorableFloatingWindow ) ); |
|
|
|
|
|
break; |
|
|
|
|
|
case "LeftSide": |
|
|
|
|
|
case "RightSide": |
|
|
|
|
|
case "TopSide": |
|
|
|
|
|
case "BottomSide": |
|
|
|
|
|
if( reader.IsEmptyElement ) |
|
|
|
|
|
{ |
|
|
|
|
|
reader.Read(); |
|
|
reader.Read(); |
|
|
return null; |
|
|
} |
|
|
} |
|
|
|
|
|
reader.Read(); |
|
|
XmlSerializer serializer; |
|
|
return new LayoutAnchorSide(); |
|
|
switch (reader.LocalName) |
|
|
default: |
|
|
{ |
|
|
var type = LayoutRoot.FindType( reader.LocalName ); |
|
|
case "LayoutAnchorablePaneGroup": |
|
|
if( type == null ) |
|
|
serializer = new XmlSerializer(typeof(LayoutAnchorablePaneGroup)); |
|
|
{ |
|
|
break; |
|
|
throw new ArgumentException( "AvalonDock.LayoutRoot doesn't know how to deserialize " + reader.LocalName ); |
|
|
case "LayoutAnchorablePane": |
|
|
} |
|
|
serializer = new XmlSerializer(typeof(LayoutAnchorablePane)); |
|
|
serializer = new XmlSerializer( type ); |
|
|
break; |
|
|
break; |
|
|
case "LayoutAnchorable": |
|
|
} |
|
|
serializer = new XmlSerializer(typeof(LayoutAnchorable)); |
|
|
|
|
|
break; |
|
|
return serializer.Deserialize( reader ); |
|
|
case "LayoutDocumentPaneGroup": |
|
|
} |
|
|
serializer = new XmlSerializer(typeof(LayoutDocumentPaneGroup)); |
|
|
|
|
|
break; |
|
|
public void WriteXml( XmlWriter writer ) |
|
|
case "LayoutDocumentPane": |
|
|
{ |
|
|
serializer = new XmlSerializer(typeof(LayoutDocumentPane)); |
|
|
writer.WriteStartElement( "RootPanel" ); |
|
|
break; |
|
|
if( RootPanel != null ) |
|
|
case "LayoutDocument": |
|
|
{ |
|
|
serializer = new XmlSerializer(typeof(LayoutDocument)); |
|
|
RootPanel.WriteXml( writer ); |
|
|
break; |
|
|
} |
|
|
case "LayoutAnchorGroup": |
|
|
writer.WriteEndElement(); |
|
|
serializer = new XmlSerializer(typeof(LayoutAnchorGroup)); |
|
|
|
|
|
break; |
|
|
writer.WriteStartElement( "TopSide" ); |
|
|
case "LayoutPanel": |
|
|
if( TopSide != null ) |
|
|
serializer = new XmlSerializer(typeof(LayoutPanel)); |
|
|
{ |
|
|
break; |
|
|
TopSide.WriteXml( writer ); |
|
|
case "LayoutDocumentFloatingWindow": |
|
|
} |
|
|
serializer = new XmlSerializer(typeof(LayoutDocumentFloatingWindow)); |
|
|
writer.WriteEndElement(); |
|
|
break; |
|
|
|
|
|
case "LayoutAnchorableFloatingWindow": |
|
|
writer.WriteStartElement( "RightSide" ); |
|
|
serializer = new XmlSerializer(typeof(LayoutAnchorableFloatingWindow)); |
|
|
if( RightSide != null ) |
|
|
break; |
|
|
{ |
|
|
case "LeftSide": |
|
|
RightSide.WriteXml( writer ); |
|
|
case "RightSide": |
|
|
} |
|
|
case "TopSide": |
|
|
writer.WriteEndElement(); |
|
|
case "BottomSide": |
|
|
|
|
|
if (reader.IsEmptyElement) |
|
|
writer.WriteStartElement( "LeftSide" ); |
|
|
{ |
|
|
if( LeftSide != null ) |
|
|
reader.Read(); |
|
|
{ |
|
|
return null; |
|
|
LeftSide.WriteXml( writer ); |
|
|
} |
|
|
} |
|
|
reader.Read(); |
|
|
writer.WriteEndElement(); |
|
|
return new LayoutAnchorSide(); |
|
|
|
|
|
default: |
|
|
writer.WriteStartElement( "BottomSide" ); |
|
|
var type = LayoutRoot.FindType(reader.LocalName); |
|
|
if( BottomSide != null ) |
|
|
if (type == null) |
|
|
{ |
|
|
{ |
|
|
BottomSide.WriteXml( writer ); |
|
|
throw new ArgumentException("AvalonDock.LayoutRoot doesn't know how to deserialize " + reader.LocalName); |
|
|
} |
|
|
} |
|
|
writer.WriteEndElement(); |
|
|
serializer = new XmlSerializer(type); |
|
|
|
|
|
break; |
|
|
// Write all floating windows (can be LayoutDocumentFloatingWindow or LayoutAnchorableFloatingWindow).
|
|
|
} |
|
|
// To prevent "can not create instance of abstract type", the type is retrieved with GetType().Name
|
|
|
|
|
|
writer.WriteStartElement( "FloatingWindows" ); |
|
|
return serializer.Deserialize(reader); |
|
|
foreach( var layoutFloatingWindow in FloatingWindows ) |
|
|
} |
|
|
{ |
|
|
|
|
|
writer.WriteStartElement( layoutFloatingWindow.GetType().Name ); |
|
|
public void WriteXml(XmlWriter writer) |
|
|
layoutFloatingWindow.WriteXml( writer ); |
|
|
{ |
|
|
|
|
|
writer.WriteStartElement("RootPanel"); |
|
|
|
|
|
if (RootPanel != null) |
|
|
|
|
|
{ |
|
|
|
|
|
RootPanel.WriteXml(writer); |
|
|
|
|
|
} |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("TopSide"); |
|
|
|
|
|
if (TopSide != null) |
|
|
|
|
|
{ |
|
|
|
|
|
TopSide.WriteXml(writer); |
|
|
|
|
|
} |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("RightSide"); |
|
|
|
|
|
if (RightSide != null) |
|
|
|
|
|
{ |
|
|
|
|
|
RightSide.WriteXml(writer); |
|
|
|
|
|
} |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("LeftSide"); |
|
|
|
|
|
if (LeftSide != null) |
|
|
|
|
|
{ |
|
|
|
|
|
LeftSide.WriteXml(writer); |
|
|
|
|
|
} |
|
|
writer.WriteEndElement(); |
|
|
writer.WriteEndElement(); |
|
|
} |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
|
|
|
|
|
|
writer.WriteStartElement( "Hidden" ); |
|
|
writer.WriteStartElement("BottomSide"); |
|
|
foreach( var layoutAnchorable in Hidden ) |
|
|
if (BottomSide != null) |
|
|
{ |
|
|
{ |
|
|
layoutAnchorable.WriteXml( writer ); |
|
|
BottomSide.WriteXml(writer); |
|
|
} |
|
|
} |
|
|
writer.WriteEndElement(); |
|
|
writer.WriteEndElement(); |
|
|
|
|
|
|
|
|
|
|
|
// Write all floating windows (can be LayoutDocumentFloatingWindow or LayoutAnchorableFloatingWindow).
|
|
|
|
|
|
// To prevent "can not create instance of abstract type", the type is retrieved with GetType().Name
|
|
|
|
|
|
writer.WriteStartElement("FloatingWindows"); |
|
|
|
|
|
foreach (var layoutFloatingWindow in FloatingWindows) |
|
|
|
|
|
{ |
|
|
|
|
|
writer.WriteStartElement(layoutFloatingWindow.GetType().Name); |
|
|
|
|
|
layoutFloatingWindow.WriteXml(writer); |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
} |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("Hidden"); |
|
|
|
|
|
foreach (var layoutAnchorable in Hidden) |
|
|
|
|
|
{ |
|
|
|
|
|
writer.WriteStartElement(layoutAnchorable.GetType().Name); |
|
|
|
|
|
layoutAnchorable.WriteXml(writer); |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
} |
|
|
|
|
|
writer.WriteEndElement(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
internal static Type FindType( string name ) |
|
|
internal static Type FindType(string name) |
|
|
{ |
|
|
{ |
|
|
foreach( var assembly in AppDomain.CurrentDomain.GetAssemblies() ) |
|
|
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) |
|
|
{ |
|
|
|
|
|
foreach( var type in assembly.GetTypes() ) |
|
|
|
|
|
{ |
|
|
{ |
|
|
if( type.Name.Equals( name ) ) |
|
|
foreach (var type in assembly.GetTypes()) |
|
|
return type; |
|
|
{ |
|
|
|
|
|
if (type.Name.Equals(name)) |
|
|
|
|
|
return type; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return null; |
|
|
return null; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#if TRACE
|
|
|
#if TRACE
|
|
|
|