稳扎稳打Silverlight

示例
1、IMarkupExtension(自定义 XAML 扩展标记)
XAML/ConcatMarkupExtension.cs

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using System.Xaml;

namespace Silverlight50.XAML
{
    /// 
    /// 实现自定义 XAML 扩展标记,需要实现 IMarkupExtension 接口
    /// 自定义 XAML 扩展标记以“Extension”结尾,XAML 书写时可以不必带“Extension”
    /// 
    /// 本例中的 ConcatMarkup 扩展标记,用于合并两个字符串
    /// 
    public class ConcatMarkupExtension : IMarkupExtension<string>
    {
        public object String1 { get; set; }
        public object String2 { get; set; }

        /// 
        /// 需要实现的方法,返回 ConcatMarkup 的计算结果
        /// 
        public string ProvideValue(IServiceProvider serviceProvider)
        {
            return String1.ToString() + String2.ToString();
        }
    }
}
复制代码

XAML/IMarkupExtension.xaml

<navigation:Page x:Class="Silverlight50.XAML.IMarkupExtension" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="IMarkupExtension Page"
                 
           xmlns:local="clr-namespace:Silverlight50.XAML">
    
    <Grid x:Name="LayoutRoot">

        
        <TextBlock Text="{local:ConcatMarkup String1=wang, String2=lei}" />

    Grid>
navigation:Page>
复制代码


2、SoundEffectDemo(通过 XNA 处理声音效果)
Media/SoundEffectDemo.xaml

<navigation:Page x:Class="Silverlight50.Media.SoundEffectDemo" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="SoundEffectDemo Page">
    <StackPanel HorizontalAlignment="Left">

        <StackPanel Orientation="Horizontal">
            <TextBlock Name="lblVolume" Width="100" Text="音量" TextAlignment="Center" />
            <TextBlock Name="lblPitch" Width="100" Text="高音" TextAlignment="Center" />
            <TextBlock Name="lblPan" Width="100" Text="平衡" TextAlignment="Center" />
        StackPanel>

        <StackPanel Orientation="Horizontal">
            <Slider Name="sliderVolume" Width="100" Height="200" Orientation="Vertical" Minimum="0" Maximum="1" Value="0.5" />
            <Slider Name="sliderPitch" Width="100" Height="200" Orientation="Vertical" Maximum="1" Minimum="-1" Value="0" />
            <Slider Name="sliderPan"  Width="100" Height="200" Orientation="Vertical" Maximum="1" Minimum="-1" Value="0" />
        StackPanel>

        <StackPanel Orientation="Horizontal">
            <TextBlock Name="txtVolume" Width="100" TextAlignment="Center" />
            <TextBlock Name="txtPitch" Width="100" TextAlignment="Center" />
            <TextBlock Name="txtPan" Width="100" TextAlignment="Center" />
        StackPanel>

    StackPanel>
navigation:Page>
复制代码

Media/SoundEffectDemo.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

using Microsoft.Xna.Framework.Audio;
using System.Windows.Resources;

namespace Silverlight50.Media
{
    /// 
    /// Silverlight 5 支持通过 SoundEffect 处理 wav 音效文件
    /// 本例演示:如何控制音量,高低音,左右声道平衡
    /// 
    public partial class SoundEffectDemo : Page
    {
        /*
         * SoundEffect - 音效对象
         *     SoundEffect.Play(float volume, float pitch, float pan) - 播放音效
         *         volume - 音量值,0 到 1 之间
         *         pitch - 高音值, -1 到 1 之间,-1 是纯低音,1 是纯高音
         *         pan - 左右声道平衡值,-1 到 1 之间,-1 是仅左声道有声,1 是仅右声道有声
         *     SoundEffect.Duration - 音效的时长
         *     SoundEffect.Name - 音效对象的名称
         */

        /*
         * SoundEffectInstance - SoundEffect 的对象实例
         *     SoundEffect.CreateInstance() - 返回 SoundEffect 对象
         *     SoundEffectInstance.Volume - 音量值,0 到 1 之间
         *     SoundEffectInstance.Pitch - 高音值, -1 到 1 之间,-1 是纯低音,1 是纯高音
         *     SoundEffectInstance.Pan - 左右声道平衡值,-1 到 1 之间,-1 是仅左声道有声,1 是仅右声道有声
         *     SoundEffectInstance.IsLooped - 是否循环播放
         *     SoundEffectInstance.Play() - 播放
         *     SoundEffectInstance.Pause() - 暂停
         *     SoundEffectInstance.Resume() - 继续播放
         *     SoundEffectInstance.Stop() - 停止
         *     SoundEffectInstance.State - 返回音效对象的当前状态 [Microsoft.Xna.Framework.Audio.SoundState 枚举]
         *         SoundState.Playing - 正在播放状态
         *         SoundState.Paused - 暂停状态
         *         SoundState.Stopped - 停止状态
         */

        /*
            SoundEffectInstance soundEffectInstance = soundEffect.CreateInstance();
            soundEffectInstance.Volume = 0.5f;
            soundEffectInstance.Pitch = -1f;
            soundEffectInstance.Pan = 0f;
            soundEffectInstance.IsLooped = true;
            soundEffectInstance.Play();
            soundEffectInstance.Pause();
            soundEffectInstance.Resume();
            soundEffectInstance.Stop();
            SoundState soundState = soundEffectInstance.State;
        */

        private SoundEffect _soundEffect;
        private SoundEffectInstance _instance;

        public SoundEffectDemo()
        {
            InitializeComponent();

            this.Loaded += new RoutedEventHandler(SoundEffectDemo_Loaded);
        }

        void SoundEffectDemo_Loaded(object sender, RoutedEventArgs e)
        {
            this.sliderVolume.ValueChanged += new RoutedPropertyChangedEventHandler<double>(sliderVolume_ValueChanged);
            this.sliderPitch.ValueChanged += new RoutedPropertyChangedEventHandler<double>(sliderPitch_ValueChanged);
            this.sliderPan.ValueChanged += new RoutedPropertyChangedEventHandler<double>(sliderPan_ValueChanged);

            // 获取 wav 文件流
            StreamResourceInfo musicStream = Application.GetResourceStream(new Uri("Media/rockyou.wav", UriKind.RelativeOrAbsolute));
            _soundEffect = SoundEffect.FromStream(musicStream.Stream);

            // 设置音效的初始属性
            _instance = _soundEffect.CreateInstance();
            _instance.IsLooped = true;
            _instance.Pitch = 0f;
            _instance.Pan = 0f;
            _instance.Volume = .5f;
            _instance.Play();
        }

        // 控制音量
        private void sliderVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            _instance.Volume = (float)e.NewValue;
            txtVolume.Text = e.NewValue.ToString("f2");
        }

        // 控制高低音
        private void sliderPitch_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            _instance.Pitch = (float)e.NewValue; ;
            txtPitch.Text = e.NewValue.ToString("f2");
        }

        // 控制左右声道平衡
        private void sliderPan_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            _instance.Pan = (float)e.NewValue; ;
            txtPan.Text = e.NewValue.ToString("f2");
        }
    }
}
复制代码


3、VectorPrinting(支持矢量打印)

<navigation:Page x:Class="Silverlight50.Other.VectorPrinting" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="VectorPrinting Page">
    <Grid x:Name="LayoutRoot">

        <TextBlock Text="支持矢量打印了" />
        
    Grid>
navigation:Page>
复制代码


4、ClickCount(统计连击的次数)
Other/ClickCount.xaml

<navigation:Page x:Class="Silverlight50.Other.ClickCount" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="ClickCount Page">
    <StackPanel x:Name="LayoutRoot">
        
        <Rectangle Name="rectangle" Width="100" Height="30" Fill="Gray" MouseLeftButtonDown="rectangle_MouseLeftButtonDown" />
        <TextBlock Name="txt" />
        
    StackPanel>
navigation:Page>
复制代码

Other/ClickCount.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

namespace Silverlight50.Other
{
    public partial class ClickCount : Page
    {
        public ClickCount()
        {
            InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {

        }

        private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            /*
             * MouseButtonEventArgs.ClickCount - 获取连击的次数
             * 注:连击的最大间隔时间是由操作系统的"控制面板"-->"鼠标"-->"双击速度"设置的
             */

            if (e.ClickCount == 1) // Single Click
                txt.Text = "Left Mouse Click Counter:" + e.ClickCount.ToString();
            else if (e.ClickCount == 2) // Double Click
                txt.Text = "Left Mouse Click Counter:" + e.ClickCount.ToString();
            else // More Click
                txt.Text = "Left Mouse Click Counter:" + e.ClickCount.ToString();
        }
    }
}

你可能感兴趣的:(稳扎稳打Silverlight)