Интерактивность
Silverlight и JavaScript
Silverlight поддерживает базовый набор функций JavaScript, описание которого приводится в разделе "JavaScript API for Silverlight Reference" (http://msdn.microsoft.com/en-us/library/bb979679(VS.95).aspx). Можно ожидать, что последующие версии Silverlight будут включать в себя все больший набор возможностей JavaScript.
Связывание произвольной JavaScript функции с определенным событием осуществляется так:
MouseLeftButtonDown="myFunction"
Здесь MouseLeftButtonDown - событие, возникающее при нажатии левой кнопки мыши, а myFunction – имя функции, которая должна запускаться при возникновении этого события. В XAML-коде эта связка задается в описании элемента:
<Canvas
  xmlns="http://schemas.microsoft.com/client/2007"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Width="200" Height="100"
  Background="White"
  x:Name="Page">
  <Rectangle Width="100" Height="30" 
   Canvas.Left="50" Canvas.Top="40" 
    Fill="yellow" RadiusY="10" RadiusX="10" 
    Stroke="green" StrokeThickness="5" 
    MouseLeftButtonDown="myFunction"/>
</Canvas>Названия событий является зарезервированными, более того, регистр также учитывается. Перечень событий приводится в разделе " Events Reference" (http://msdn.microsoft.com/en-us/library/bb980189(VS.95).aspx). Функция myFunction определяется в специальном файле "Page.xaml.js", который находится в папке проекта (рис. 8.1):
Внутри функции определяется функциональность, например появление простейшего диалогового окна:
function myFunction () {
  alert ("Привет, Silverlight и JavaScript!");
}В результате, при нажатии на прямоугольник, в браузере появляется диалоговое окно (рис. 8.2):
Использование JavaScript в Silverlight-проектах – отличный способ определить функциональность на стороне клиента. Это означает, что при выполнении различных действий пользователь не будет ждать перезагрузки страницы, так как выполнение JavaScript не требует обращения к серверу.
В табл. 8.1приводится несколько других несложных примеров.
| № | Код | Вид в браузере | 
|---|---|---|
| 8.1.1 | ||
| Page.xaml: <Canvas
xmlns="http://schemas.microsoft.com/
client/2007"
xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml"
Width="200" Height="100"
Background="White"
x:Name="Page">
    
 <Rectangle Canvas.Left="5" 
Canvas.Top="5" Width="190" 
Height="90"
 Fill="Transparent"  
 Stroke="green" 
StrokeThickness="2"/>
   
<Rectangle x:Name="myRectangle" 
Canvas.Left="20" 
Canvas.Top="20" 
Width="100" Height="50" 
 Fill="Orange" 
 MouseEnter="DoMouseEnter" 
MouseLeave="DoMouseLeave"/>
  
</Canvas>
Page.xaml.js:
function DoMouseEnter(sender, mouseEventArgs)
{   
 sender.findName("myRectangle").
Fill="Red";
}
function DoMouseLeave(sender, mouseEventArgs)
{   
 sender.findName("myRectangle").
Fill="Orange";
} | ||
| Описание | ||
| При наведении курсора на прямоугольник он становится красным. При выходе курсора из области прямоугольника цвет становится прежним | ||
| № | Код | Вид в браузере | 
| 8.1.2 | ||
| Page.xaml: <Canvas
xmlns="http://schemas.microsoft.com/
client/2007"
xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml"
Width="310" Height="50"
Background="White"
x:Name="Page">
    
 <Rectangle Canvas.Left="5" 
Canvas.Top="5" Width="300" 
Height="40"
 Fill="Transparent"  
 Stroke="green"
 StrokeThickness="2"/>
   
 <TextBlock
 Canvas.Left="12" 
 Canvas.Top="12" 
 FontSize="14"
 Foreground="Orange"
 x:Name="myTextBlock" 
MouseEnter="DoMouseEnter" 
MouseLeftButtonDown="
DoMouseLeftButtonDown" 
MouseLeftButtonUp="
DoMouseLeftButtonUp" 
MouseLeave="DoMouseLeave"
Text="Наведите мышь и щелкните!" />  
 
  
</Canvas>
Page.xaml.js:
function DoMouseEnter(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
FontSize="20";
}
function DoMouseLeftButtonDown(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
Foreground="Red";
}
function DoMouseLeftButtonUp(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
Foreground="Orange";
}
function DoMouseLeave(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
FontSize="14";
} | ||
| Описание | ||
| При наведении курсора текст увеличивается, при нажатии левой кнопки мыши он становится красным | ||
| № | Код | Вид в браузере | 
| 8.1.3 | ||
| Page.xaml: <Canvas
xmlns="http://schemas.microsoft.com/
client/2007"
xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml"
Width="300" Height="120"
Background="White"
x:Name="Page">    
 <Rectangle Canvas.Left="5"
 Canvas.Top="5" Width="290" 
Height="110"
 Fill="Transparent"  
 Stroke="green" 
StrokeThickness="2"/>
 
 <!-- Кнопка с подписью-->
  
<Ellipse x:Name="myEllipse"
 Width="152" Height="41" 
Canvas.Left="73"
 Canvas.Top="55" Fill="Pink"
 Stroke="Red" 
 StrokeThickness="5" 
MouseEnter="DoMouseEnter" 
MouseLeave="DoMouseLeave" />
 
  <TextBlock
 Canvas.Left="112" 
 Canvas.Top="68" 
 FontSize="11"
 Text="Изменить цвет"
MouseEnter="DoMouseEnter" 
MouseLeave="DoMouseLeave" />  
  
<!--Изменяемая надпись-->
 <TextBlock
 Canvas.Left="100" 
 Canvas.Top="12" 
 FontSize="14"
 Foreground="Blue"
 x:Name="myTextBlock" 
 Text="XAML-графика" />   
 
  
</Canvas>
Page.xaml.js:
function DoMouseEnter(sender, mouseEventArgs)
{   
sender.findName("myTextBlock").
Foreground="Red";
}
function DoMouseLeave(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
Foreground="Blue";
} | ||
| Описание | ||
| При наведении курсора мыши на кнопку цвет надписи меняется. Для получения этой функциональности обработка событий привязывается как к эллипсу, так и к расположенному на нем текстовому элементу | ||
| № | Код | Вид в браузере | 
| 8.1.4 | ||
| Page.xaml: <Canvas
xmlns="http://schemas.microsoft.com/
client/2007"
xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml"
Width="300" Height="120"
Background="White"
x:Name="Page">    
 <Rectangle Canvas.Left="5" 
Canvas.Top="5" Width="290"
 Height="110"
 Fill="Transparent"  
Stroke="green" 
StrokeThickness="2"/>
 <!-- Кнопка с подписью-->
  
<Ellipse x:Name="myEllipse" 
Width="152" 
Height="41" Canvas.Left="73"
 Canvas.Top="55" Fill="Pink" 
Stroke="Red" 
StrokeThickness="5" 
MouseEnter="DoMouseEnter" 
MouseLeave="DoMouseLeave" />
 
  <TextBlock
 Canvas.Left="112" 
 Canvas.Top="68" 
 FontSize="11"
 Text="Изменить цвет"
MouseEnter="DoMouseEnter" 
MouseLeave="DoMouseLeave" />  
  
<!--Изменяемая надпись-->
 <TextBlock
 Canvas.Left="100" 
 Canvas.Top="12" 
 FontSize="14"
 Foreground="Blue"
 x:Name="myTextBlock" 
 Text="XAML-графика" />   
 
  
</Canvas>
Page.xaml.js:
function DoMouseEnter(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
Foreground="Red";
 sender.findName("myTextBlock").
FontSize="24";
}
function DoMouseLeave(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
Foreground="Blue";
 sender.findName("myTextBlock").
FontSize="14";
} | ||
| Описание | ||
| Изменение цвета и размера шрифта при наведении курсора | ||
| № | Код | Вид в браузере | 
| 8.1.5 | ||
| Page.xaml: <Canvas
xmlns="http://schemas.microsoft.com/
client/2007"
xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml"
Width="300" Height="120"
Background="White"
x:Name="Page">    
 <Rectangle Canvas.Left="5" 
Canvas.Top="5" Width="290" 
Height="110"
 Fill="Transparent"  
Stroke="green" 
StrokeThickness="2"/>
 
 <!-- Кнопка с подписью-->
  
<Ellipse x:Name="myEllipse" 
Width="152" Height="41" 
Canvas.Left="73"
 Canvas.Top="55" Fill="Pink" 
Stroke="Red" 
StrokeThickness="5" 
MouseLeftButtonDown=
"DoMouseLeftButtonDown" 
MouseLeftButtonUp=
"DoMouseLeftButtonUp" />  
 
  <TextBlock
 Canvas.Left="112" 
 Canvas.Top="68" 
 FontSize="11"
 Text="Изменить цвет"
MouseLeftButtonDown=
"DoMouseLeftButtonDown" 
MouseLeftButtonUp=
"DoMouseLeftButtonUp" />  
  
<!--Изменяемая надпись-->
 <TextBlock
 Canvas.Left="100" 
 Canvas.Top="12" 
 FontSize="14"
 Foreground="Blue"
 x:Name="myTextBlock" 
 Text="XAML-графика" />   
 
  
</Canvas>
Page.xaml.js:
function DoMouseLeftButtonDown(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
Foreground="Red";
 sender.findName("myTextBlock").
FontSize=24;
}
function DoMouseLeftButtonUp(sender, mouseEventArgs)
{   
 sender.findName("myTextBlock").
Foreground="Blue";
 sender.findName("myTextBlock").
FontSize=14;
} | ||
| Описание | ||
| Изменение цвета и размера шрифта при нажатии левой кнопки мыши | ||
| № | Код | Вид в браузере | 
| 8.1.6 | ||
| Page.xaml: <Canvas
xmlns="http://schemas.microsoft.com/
client/2007"
xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml"
Width="300" Height="120"
Background="White"
x:Name="Page"   
 GotFocus="onGotFocus"
  LostFocus="onLostFocus">
   
 <Rectangle Canvas.Left="5" 
Canvas.Top="5" Width="290" 
Height="110"
 Fill="Transparent"  
Stroke="green" 
StrokeThickness="2"/>
<!-- Текущий адрес-->
  
<Ellipse x:Name="myEllipse" 
Width="152" Height="41"
 Canvas.Left="73"
 Canvas.Top="18"
  Fill="Pink" 
Stroke="Red" 
StrokeThickness="5" 
MouseLeftButtonDown="currLocation" 
 />  
 
  <TextBlock
 Canvas.Left="135" 
 Canvas.Top="31" 
 FontSize="11"
 Text="ГДЕ Я?"
MouseLeftButtonDown="currLocation" 
 />
 
 <!-- Новый адрес -->
 
  <Ellipse x:Name="myEllipse_Copy1"
 Width="152" Height="41" 
Canvas.Left="73"
 Canvas.Top="66" Fill="Pink" 
Stroke="Red" StrokeThickness="5" 
    MouseLeftButtonDown="newLocation" 
 />
  <TextBlock
    Canvas.Left="122" 
    Canvas.Top="79" 
    FontSize="11"
    Text="ИНТУИТ.РУ"
    MouseLeftButtonDown="newLocation" 
 />  
 
  
</Canvas>
Page.xaml.js:
function currLocation()
{
alert(window.location)
}
function newLocation()
{
window.location="http://www.intuit.ru/"
} | Получение текущего адреса и переход на заданную ссылку. Эта функциональность получена с помощью свойства location объекта window самого JavaScript. Пример демонстрирует возможность создания гиперссылок | |
| Описание | ||
 
                             






