飘遥的Blog

C/C++/.NET
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

乱弹琴 Silverlight 2.0 (11) 扩展事件/HttpUtility

Posted on 2008-04-12 02:56  Zzx飘遥  阅读(433)  评论(0编辑  收藏  举报

前言: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:

<Grid x:Name="LayoutRoot" Background="DarkGreen" Loaded="LayoutRoot_Loaded">
    
<TextBlock x:Name="tbkPosition" Foreground="Yellow"></TextBlock>
</Grid>

C#:

int cnt = 0;

[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 x:Name="LayoutRoot" Background="DarkGreen" ShowGridLines="True">
    
<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#:

private void btnHtmlEncode_Click(object sender, RoutedEventArgs e)
{
    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命名空间到此暂告一段落,接下来介绍图形图像变换等内容。