This question is locked. New answers and comments are not allowed.
How do execute the event MainPage.TestApp in SecondPage? Note: SecondPage is called the MainPage.
MainPage.Xaml
MainPage.Xaml.cs
SecondPage.Xaml
SecondPage.Xaml.cs
MainPage.Xaml
<UserControl x:Class=
"SilverlightApp.MainPage"
mc:Ignorable=
"d"
xmlns:controlsToolkit=
"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
d:DesignHeight=
"300"
d:DesignWidth=
"400"
xmlns:telerik=
"http://schemas.telerik.com/2008/xaml/presentation"
>
<controlsToolkit:BusyIndicator x:Name=
"biProcess"
>
<Grid x:Name=
"LayoutRoot"
Background=
"White"
>
<telerik:RadButton Content=
"Load Second Page"
Height=
"Auto"
HorizontalAlignment=
"Left"
Margin=
"168,133,0,0"
Name=
"radButton1"
VerticalAlignment=
"Top"
Width=
"Auto"
Click=
"radButton1_Click"
/>
</Grid>
</controlsToolkit:BusyIndicator>
</UserControl>
MainPage.Xaml.cs
using
System;
using
System.Collections.Generic;
using
System.IO;
using
System.Linq;
using
System.Net;
using
System.Reflection;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Resources;
using
System.Xml;
using
Telerik.Windows.Controls;
namespace
SilverlightApp
{
public
partial
class
MainPage : UserControl
{
public
MainPage()
{
InitializeComponent();
}
private
void
radButton1_Click(
object
sender, RoutedEventArgs e)
{
ProcessingOptionClicked(
"SilverlightApp"
,
"SilverlightApp.SecondPage"
,
"SecondPage"
);
}
private
void
testApp(
string
strTest)
{
RadWindow.Alert(strTest);
}
private
List<XAPLoader> listXAPs =
new
List<XAPLoader>();
private
List<RadWindow> listWindows =
new
List<RadWindow>();
private
string
_TitleNewWindow;
private
string
_TypeClassNewWindow;
private
void
ProcessingOptionClicked(
string
xap,
string
classe,
string
TitleNewWindow)
{
_TitleNewWindow = TitleNewWindow;
_TypeClassNewWindow = classe;
RadWindow windowInList = listWindows.FirstOrDefault(x => x.Tag.ToString().ToLower() == _TitleNewWindow.ToLower());
if
(windowInList !=
null
)
{
windowInList.Show();
}
else
{
XAPLoader xapInList = listXAPs.FirstOrDefault(x => x.NameXAP.ToLower() == xap.ToLower());
if
(xapInList ==
null
)
{
biProcess.BusyContent =
"Load Module..."
;
biProcess.IsBusy =
true
;
XAPLoader loader =
new
XAPLoader(xap, biProcess);
loader.XapLoaded += loader_XapLoaded;
loader.LoadXap(xap);
}
else
{
ShowWindow(xapInList, _TypeClassNewWindow, _TitleNewWindow);
}
}
}
private
void
loader_XapLoaded(
object
sender, EventArgs e)
{
biProcess.IsBusy =
false
;
XAPLoader xapLoaded = (XAPLoader)sender;
listXAPs.Add(xapLoaded);
ShowWindow(xapLoaded, _TypeClassNewWindow, _TitleNewWindow);
}
private
void
ShowWindow(XAPLoader xap,
string
typeClassNewWindow,
string
TitleNewWindow)
{
RadWindow window =
null
;
UserControl userControl =
null
;
try
{
window =
new
RadWindow();
userControl = (UserControl)xap.InstantiateClass(typeClassNewWindow);
double
widthWindow = (userControl.MinWidth != 0 ? userControl.MinWidth : userControl.Width);
double
heightWindow = (userControl.MinHeight != 0 ? userControl.MinHeight : userControl.Height);
window.VerticalAlignment = System.Windows.VerticalAlignment.Center;
window.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
window.Width = widthWindow + 14;
window.Height = heightWindow + 30;
window.WindowStartupLocation = Telerik.Windows.Controls.WindowStartupLocation.CenterScreen;
window.Content = userControl;
window.Header = _TitleNewWindow;
window.Tag = _TitleNewWindow;
}
catch
(Exception ex)
{
biProcess.IsBusy =
false
;
string
mensagemErro =
"Error!"
;
RadWindow.Alert(
string
.Format(
"Error in load of window {0}.{1}{1}{2}"
, _TitleNewWindow, Environment.NewLine, mensagemErro));
}
if
(window !=
null
&& userControl !=
null
)
{
window.Loaded +=
new
RoutedEventHandler(window_Loaded);
window.Closed +=
new
EventHandler<WindowClosedEventArgs>(window_Closed);
window.Show();
}
}
void
window_Loaded(
object
sender, RoutedEventArgs e)
{
listWindows.Add((RadWindow)sender);
WeakReference referance =
new
WeakReference(sender);
}
void
window_Closed(
object
sender, WindowClosedEventArgs e)
{
RadWindow window = (RadWindow)sender;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
listWindows.Remove(window);
}
}
public
class
XAPLoader
{
private
string
_m_rootAssembly;
private
Assembly _asm;
public
event
EventHandler<EventArgs> XapLoaded;
public
string
NameXAP {
get
;
set
; }
private
BusyIndicator _biProcess {
get
;
set
; }
public
XAPLoader(
string
namexap, BusyIndicator biProcess)
{
NameXAP = namexap;
_biProcess = biProcess;
}
public
void
LoadXap(
string
nameXAP)
{
Uri xapUri =
new
Uri((nameXAP +
".xap"
), UriKind.Relative);
_m_rootAssembly = System.IO.Path.GetFileNameWithoutExtension(xapUri.ToString());
WebClient wc =
new
WebClient();
wc.OpenReadCompleted += wc_OpenReadCompleted;
wc.OpenReadAsync(xapUri);
}
private
void
wc_OpenReadCompleted(
object
sender, OpenReadCompletedEventArgs e)
{
try
{
if
(e.Error !=
null
)
{
string
mensagemError =
string
.Format(
"Error creating instance {0}.{1}{1}{2}"
, NameXAP, Environment.NewLine, e.Error.Message);
throw
new
Exception(mensagemError);
}
var manifestStream = Application.GetResourceStream(
new
StreamResourceInfo(e.Result,
null
),
new
Uri(
"AppManifest.xaml"
, UriKind.Relative));
string
appManifest =
new
StreamReader(manifestStream.Stream).ReadToEnd();
string
assemblyName = _m_rootAssembly +
".dll"
;
XmlReader reader = XmlReader.Create(
new
StringReader(appManifest));
_asm =
null
;
while
(reader.Read())
{
if
(reader.IsStartElement(
"AssemblyPart"
))
{
reader.MoveToAttribute(
"Source"
);
reader.ReadAttributeValue();
if
(reader.Value == assemblyName)
{
var assemblyStream =
new
StreamResourceInfo(e.Result,
"application/binary"
);
var si = Application.GetResourceStream(assemblyStream,
new
Uri(reader.Value, UriKind.Relative));
AssemblyPart p =
new
AssemblyPart();
_asm = p.Load(si.Stream);
break
;
}
}
}
if
(_asm ==
null
)
throw
new
InvalidOperationException(
"XapLoader: Could not load the assembly "
+ assemblyName +
"."
);
}
catch
(Exception ex)
{
_biProcess.IsBusy =
false
;
throw
new
Exception(ex.Message);
}
RaiseXapLoadedEvent();
}
public
object
InstantiateClass(
string
typeClass)
{
var retorno = _asm.CreateInstance(typeClass);
if
(retorno ==
null
)
{
throw
new
InvalidOperationException(
"XapLoader: could not instantiate the type "
+ typeClass +
"."
);
}
return
retorno;
}
private
void
RaiseXapLoadedEvent()
{
if
(XapLoaded !=
null
)
{
XapLoaded(
this
,
new
EventArgs());
}
}
}
}
SecondPage.Xaml
<UserControl x:Class=
"SilverlightApp.SecondPage"
mc:Ignorable=
"d"
d:DesignHeight=
"300"
d:DesignWidth=
"400"
xmlns:telerik=
"http://schemas.telerik.com/2008/xaml/presentation"
>
<Grid x:Name=
"LayoutRoot"
Background=
"White"
>
<telerik:RadButton Content=
"Close!"
Height=
"Auto"
HorizontalAlignment=
"Left"
Margin=
"323,251,0,0"
Name=
"radButton1"
VerticalAlignment=
"Top"
Width=
"Auto"
Click=
"radButton1_Click"
/>
</Grid>
</UserControl>
SecondPage.Xaml.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
Telerik.Windows.Controls;
namespace
SilverlightApp
{
public
partial
class
SecondPage : UserControl
{
public
SecondPage()
{
InitializeComponent();
}
private
void
radButton1_Click(
object
sender, RoutedEventArgs e)
{
(
this
.Parent
as
RadWindow).Close();
}
}
}