前言:Silverlight 2.0 Beta1 已经发布,加入了许多激动人心的新特性:WPF UI 框架、丰富的控件、丰富的网络支持、丰富的基础类库支持等。这是本人的学习笔记,写的比较乱,因此定名为乱弹琴 Silverlight 2.0 系列文章。
前面介绍事件时提到Silverlight 2.0 Beta1中事件实现不太完全,可以通过与Javascript互操作扩展事件,本篇介绍如何扩展鼠标滚轮事件。HttpUtility类比较简单,在这附带介绍。
扩展事件
Silverlight 2.0 Beta1暂不支持鼠标滚轮事件,本例用Javascript扩展鼠标滚轮事件,其他事件原理类似。
Javascript:
<script type="text/javascript">
if(window.addEventListener) window.addEventListener('DOMMouseScroll', Wheel, false);
document.onmousewheel = Wheel;
function Wheel(e)
{
if(!e) e = window.event;
var v = 0;
if (e.wheelDelta) v = e.wheelDelta / 120 //类IE内核浏览器
if (e.detail) v = -(e.detail / 3) //类FF内核浏览器
$get("Xaml1").content.wheelHandler.GetEvent(e.clientX, e.clientY, v);
}
</script>
类IE内核浏览器鼠标向前滚动,数值为:+120,向后滚动,数值为:-120。
类FF内核浏览器鼠标向前滚动,数值为:-3,向后滚动,数值为:+3。
为了兼容浏览器,标志事件已被触发,可归一为向前滚动:+1,向后滚动:-1
XAML:
<TextBlock x:Name="tbkPosition" Foreground="Yellow"></TextBlock>
</Grid>
C#:
[ScriptableMember]
public void GetEvent(int x, int y, int z)
{
cnt += z;
tbkPosition.Text = string.Format("鼠标指针的位置为:[{0},{1}],\n滚轮值为:{2}", x, y, cnt);
}
private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
HtmlPage.RegisterScriptableObject("wheelHandler", this);
}
运行效果:
IE:
FF:
HttpUtility
实现Url编码、译码及HTML编码、译码,简单举例:
XAML:
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtHtmlEncode" Style="{StaticResource txtStyle}"
Grid.Row="0" Grid.Column="0"></TextBox>
<TextBox x:Name="txtHtmlDecode" Style="{StaticResource txtStyle}"
Grid.Row="1" Grid.Column="0"></TextBox>
<TextBox x:Name="txtUrlEncode" Style="{StaticResource txtStyle}"
Grid.Row="2" Grid.Column="0"></TextBox>
<TextBox x:Name="txtUrlDecode" Style="{StaticResource txtStyle}"
Grid.Row="3" Grid.Column="0"></TextBox>
<Button x:Name="btnHtmlEncode" Style="{StaticResource btnStyle}"
Grid.Row="0" Grid.Column="1" Content="HtmlEncode" Click="btnHtmlEncode_Click">
</Button>
<Button x:Name="btnHtmlDecode" Style="{StaticResource btnStyle}"
Grid.Row="1" Grid.Column="1" Content="HtmlDecode" Click="btnHtmlDecode_Click">
</Button>
<Button x:Name="btnUrlEncode" Style="{StaticResource btnStyle}"
Grid.Row="2" Grid.Column="1" Content="UrlEncode" Click="btnUrlEncode_Click">
</Button>
<Button x:Name="btnUrlDecode" Style="{StaticResource btnStyle}"
Grid.Row="3" Grid.Column="1" Content="UrlDecode" Click="btnUrlDecode_Click">
</Button>
</Grid>
C#:
{
txtHtmlDecode.Text = HttpUtility.HtmlEncode(txtHtmlEncode.Text);
}
private void btnHtmlDecode_Click(object sender, RoutedEventArgs e)
{
txtHtmlEncode.Text = HttpUtility.HtmlDecode(txtHtmlDecode.Text);
}
private void btnUrlEncode_Click(object sender, RoutedEventArgs e)
{
txtUrlDecode.Text = HttpUtility.UrlEncode(txtUrlEncode.Text);
}
private void btnUrlDecode_Click(object sender, RoutedEventArgs e)
{
txtUrlEncode.Text = HttpUtility.UrlDecode(txtUrlDecode.Text);
}
运行效果:
结束语:
System.Windows.Browser命名空间到此暂告一段落,接下来介绍图形图像变换等内容。