Friday, January 28, 2011

WPF Interview Questions ,Can BAML be decompiled back into XAML?



Sure, because an instance of any public .NET class can be serialized as XAML, regardless of how it was

 originally declared. The first step is to retrieve an instance that you want to be the root. If you don’t already

 have this object, you can call the static System.Windows.Application.LoadComponent method as follows:

System.Uri uri = new System.Uri(“MyWindow.xaml”, System.UriKind.Relative);

Window window = (Window)Application.LoadComponent(uri);

This differs from previous code that uses FileStream to load a .xaml file because with

LoadComponent, the name specified as the Uniform Resource Identifier (URI) does not have

to physically exist as a standalone .xaml file. LoadComponent can automatically retrieve

BAML embedded as a resource when given the appropriate URI (which, by MSBuild convention,

is the name of the original XAML source file). In fact, Visual Studio’s autogenerated

InitializeComponent method calls Application.LoadComponent to load embedded BAML,

although it uses a different overload.

After you’ve gotten a hold of the root element instance, you can use the

System.Windows.Markup.XamlWriter class to get a XAML representation of the root

element (and, therefore, any of its children). XamlWriter contains five overloads of a static

Save method, the simplest of which accepts an object instance and returns appropriate

XAML as a string. For example:

string xaml = XamlWriter.Save(window);

It might sound a little troubling that BAML can be so easily “cracked open,” but it’s really no

different from any other software running locally or displaying UI locally. (For example, you can

easily dig into a website’s HTML, JavaScript, and Cascading Style Sheets [CSS] files.)

No comments:

Post a Comment

Thermal conductivity calculations, experiments, molecular simulations

Nowadays various experimental procedures are there to calculate the thermal conductivity of various materials using various techniques. Th...

About Me

COTACT: studymaterialforall@gmail.com