Accessing objects and their attributes
XAML elements are accessed from the JavaScript code as JavaScript objects and HTML elements of a document. But a difference exists for event handlers.
Event handlers
There are functions that are assigned by their name to the events defined
in XAML. For example to MouseLeftButtonDown, mouseDown is assigned which is
the name of a function having to be executed when the event occurs, in other
words when the user depresses the left button of the mouse.
These events handlers have required parameters:
- sender, the name of the object to which the event is associated, for example the rectangle inside which one clicks.
- args, a parameter whose nature depends on the event.
Accessing inner elements
To reach the subelements of an element, the method findName is used, which
is similar in operation to getElementById of DOM.
It is necessary before to use it, to associate a name to the element, with
the attribute Name:
x: Name
Example:
<Canvas MouseLeftButtonDown="javascript:clicRect"> <Rectangle x:Name="rect" /> <Ellipse x:Name="ell" /> </Canvas>
The Javascript function:
function clicRect(sender, args) { var r = sender.FindName("rect"); }
Accessing a XAML element anywhere
If one wants to access a XAML element anywhere in the file, it could not
be reached from the sender pointer.
A global variable may be created to access
the element of a ActiveX object with this line:
var app = document.getElementById("myControl");
The variable myControl, which actually one can name as one wants, will replace sender, thus the following instruction is equivalent to that which uses sender in the preceding example:
function aFunction() { var r = app.content.FindName("rect"); }
Accessing properties
Properties of the objects are accessed as for HTML elements in Javascript, by using the name of the property for the index, and that works even if it as an attached property:
<Canvas MouseLeftButtonDown="javascript:clicRect"> <Rectangle x:Name="rect" Canvas.Top="10" Canvas.Left="20" </Rectangle> </Canvas>
And the JavaScript function:
function clicRect(sender, args) { var r = sender.FindName("rect"); alert("Top=" + r["Canvas.Top"]); }
The Canvas.Top property is index of the object "r" which points on the Rectangle element named "rect", and the function alert thus displays the vertical position of the rectangle inside Canvas.
Demonstration
The full code
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MouseLeftButtonDown="clicRect"
>
<Rectangle
x:Name="rect"
Canvas.Top="10"
Canvas.Left="20"
Stroke="Black"
Width="100"
Height="30"
Fill="LightBlue"
/>
</Canvas> function clicRect(sender, args)
{
var r = sender.FindName("rect");
alert("Top=" + r["Canvas.Top"]);
}