• 稳扎稳打Silverlight(5) 2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton


    [索引页]
    [源码下载]


    稳扎稳打Silverlight(5) - 2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton


    作者:webabcd


    介绍
    Silverlight 2.0 控件一览:ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton


    在线DEMO
    http://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html


    示例
    1、ListBox.xaml
    <UserControl x:Class="Silverlight20.Control.ListBox"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml">
        
    <StackPanel HorizontalAlignment="Left">
            
            
    <!--
            SelectionChanged - ListBox中某个对象被选中后所触发的事件
            
    -->
            
    <ListBox Margin="5" Width="200" Height="100" SelectionChanged="ListBox_SelectionChanged">
                
    <ListBoxItem Content="ListBoxItem01" />
                
    <ListBoxItem Content="ListBoxItem02" />
                
    <ListBoxItem Content="ListBoxItem03" />
                
    <ListBoxItem Content="ListBoxItem04" />
                
    <ListBoxItem Content="ListBoxItem05" />
                
    <ListBoxItem Content="ListBoxItem06" />
                
    <ListBoxItem Content="ListBoxItem07" />
                
    <ListBoxItem Content="ListBoxItem08" />
                
    <ListBoxItem Content="ListBoxItem09" />
                
    <ListBoxItem Content="ListBoxItem10" />
            
    </ListBox>
            
            
    <!--
            ListBox中可以包含任何对象
            
    -->
            
    <ListBox Margin="5" Width="200">
                
    <TextBlock Text="TextBlock" />
                
    <TextBox Text="TextBox" />
                
    <Button Content="Button" />
            
    </ListBox>
            
        
    </StackPanel>
    </UserControl>

    ListBox.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.Browser;

    namespace Silverlight20.Control
    {
        
    public partial class ListBox : UserControl
        
    {
            
    public ListBox()
            
    {
                InitializeComponent();
            }


            
    private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
            
    {
                
    // ListBox.SelectedItem - ListBox中被选中的对象

                var lst 
    = sender as System.Windows.Controls.ListBox;

                MessageBox.Show(
                    ((System.Windows.Controls.ListBoxItem)lst.SelectedItem).Content 
    + " 被单击了",
                    
    "提示",
                    MessageBoxButton.OK);
            }

        }

    }



    2、MediaElement.xaml
    <UserControl x:Class="Silverlight20.Control.MediaElement"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml">
        
    <StackPanel HorizontalAlignment="Center">
            
            
    <!--
            Source - 视频路径
            AutoPlay - 是否自动播放
            
    -->
            
    <MediaElement x:Name="mediaElement" Height="250" AutoPlay="False"
                        Source
    ="/Silverlight20;component/Video/Demo.wmv"  />
            
            
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                
    <ToggleButton x:Name="play" Content="播放" Margin="5" Click="play_Click" />
                
    <ToggleButton x:Name="mute" Content="静音" Margin="5" Click="mute_Click" />
            
    </StackPanel>
        
    </StackPanel>
    </UserControl>

    MediaElement.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;

    namespace Silverlight20.Control
    {
        
    public partial class MediaElement : UserControl
        
    {
            
    public MediaElement()
            
    {
                InitializeComponent();
            }


            
    void play_Click(object sender, RoutedEventArgs e)
            
    {
                var tb 
    = sender as System.Windows.Controls.Primitives.ToggleButton;
                
    if (tb.IsChecked == true)
                
    {
                    tb.Content 
    = "暂停";

                    
    // MediaElement.Play() - 播放视频
                    this.mediaElement.Play();
                }

                
    else
                
    {
                    tb.Content 
    = "播放";

                    
    // MediaElement.Pause() - 暂停视频
                    
    // MediaElement.Stop() - 停止视频
                    this.mediaElement.Pause();
                }

            }


            
    void mute_Click(object sender, RoutedEventArgs e)
            
    {
                var tb 
    = sender as System.Windows.Controls.Primitives.ToggleButton;
                
    if (tb.IsChecked == true)
                
    {
                    tb.Content 
    = "有声";

                    
    // MediaElement.IsMuted - 是否静音
                    
    // MediaElement.Volume - 声音大小(0 - 1)
                    this.mediaElement.IsMuted = true;
                }

                
    else
                
    {
                    tb.Content 
    = "静音";
                    
    this.mediaElement.IsMuted = false;
                }

            }

        }

    }



    3、MultiScaleImage.xaml
    <UserControl x:Class="Silverlight20.Control.MultiScaleImage"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml">
        
    <StackPanel HorizontalAlignment="Left">
            
            
    <MultiScaleImage x:Name="msi" Width="400" Height="300"></MultiScaleImage>
            
        
    </StackPanel>
    </UserControl>

    MultiScaleImage.xaml.cs(支持放大/缩小/拖动/滚轮之类的,摘自Deep Zoom Composer生成的代码)
    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;

    namespace Silverlight20.Control
    {
        
    public partial class MultiScaleImage : UserControl
        
    {
            
    //
            
    // Based on prior work done by Lutz Gerhard, Peter Blois, and Scott Hanselman
            
    //
            Point lastMousePos = new Point();

            
    double _zoom = 1;
            
    bool mouseButtonPressed = false;
            
    bool mouseIsDragging = false;
            Point dragOffset;
            Point currentPosition;

            
    public double ZoomFactor
            
    {
                
    get return _zoom; }
                
    set { _zoom = value; }
            }


            
    public MultiScaleImage()
            
    {
                InitializeComponent();

                
    //
                
    // We are setting the source here, but you should be able to set the Source property via
                
    //
                this.msi.Source = new DeepZoomImageTileSource(new Uri("/DeepZoomImages/dzc_output.xml", UriKind.Relative));

                
    //
                
    // Firing an event when the MultiScaleImage is Loaded
                
    //
                this.msi.Loaded += new RoutedEventHandler(msi_Loaded);

                
    //
                
    // Firing an event when all of the images have been Loaded
                
    //
                this.msi.ImageOpenSucceeded += new RoutedEventHandler(msi_ImageOpenSucceeded);

                
    //
                
    // Handling all of the mouse and keyboard functionality
                
    //
                this.MouseMove += delegate(object sender, MouseEventArgs e)
                
    {
                    
    if (mouseButtonPressed)
                    
    {
                        mouseIsDragging 
    = true;
                    }

                    
    this.lastMousePos = e.GetPosition(this.msi);
                }
    ;

                
    this.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)
                
    {
                    mouseButtonPressed 
    = true;
                    mouseIsDragging 
    = false;
                    dragOffset 
    = e.GetPosition(this);
                    currentPosition 
    = msi.ViewportOrigin;
                }
    ;

                
    this.msi.MouseLeave += delegate(object sender, MouseEventArgs e)
                
    {
                    mouseIsDragging 
    = false;
                }
    ;

                
    this.MouseLeftButtonUp += delegate(object sender, MouseButtonEventArgs e)
                
    {
                    mouseButtonPressed 
    = false;
                    
    if (mouseIsDragging == false)
                    
    {
                        
    bool shiftDown = (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift;

                        ZoomFactor 
    = 2.0;
                        
    if (shiftDown) ZoomFactor = 0.5;
                        Zoom(ZoomFactor, 
    this.lastMousePos);
                    }

                    mouseIsDragging 
    = false;
                }
    ;

                
    this.MouseMove += delegate(object sender, MouseEventArgs e)
                
    {
                    
    if (mouseIsDragging)
                    
    {
                        Point newOrigin 
    = new Point();
                        newOrigin.X 
    = currentPosition.X - (((e.GetPosition(msi).X - dragOffset.X) / msi.ActualWidth) * msi.ViewportWidth);
                        newOrigin.Y 
    = currentPosition.Y - (((e.GetPosition(msi).Y - dragOffset.Y) / msi.ActualHeight) * msi.ViewportWidth);
                        msi.ViewportOrigin 
    = newOrigin;
                    }

                }
    ;

                
    new MouseWheelHelper(this).Moved += delegate(object sender, MouseWheelEventArgs e)
                
    {
                    e.Handled 
    = true;
                    
    if (e.Delta > 0)
                        ZoomFactor 
    = 1.2;
                    
    else
                        ZoomFactor 
    = .80;

                    Zoom(ZoomFactor, 
    this.lastMousePos);
                }
    ;
            }


            
    void msi_ImageOpenSucceeded(object sender, RoutedEventArgs e)
            
    {
                
    //If collection, this gets you a list of all of the MultiScaleSubImages
                
    //
                
    //foreach (MultiScaleSubImage subImage in msi.SubImages)
                
    //{
                
    //    // Do something
                
    //}
            }


            
    void msi_Loaded(object sender, RoutedEventArgs e)
            
    {
                
    // Hook up any events you want when the image has successfully been opened
            }


            
    public void Zoom(double zoom, Point pointToZoom)
            
    {
                Point logicalPoint 
    = this.msi.ElementToLogicalPoint(pointToZoom);
                
    this.msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y);
            }


            
    /*
             *  Sample event handlerrs tied to the Click of event of various buttons for 
             *  showing all images, zooming in, and zooming out!
             * 
            private void ShowAllClick(object sender, RoutedEventArgs e)
            {
                this.msi.ViewportOrigin = new Point(0, 0);
                this.msi.ViewportWidth = 1;
                ZoomFactor = 1;
            }

            private void zoomInClick(object sender, RoutedEventArgs e)
            {
                Zoom(1.2, new Point(this.ActualWidth / 2, this.ActualHeight / 2));
            }

            private void zoomOutClick(object sender, RoutedEventArgs e)
            {
                Zoom(.8, new Point(this.ActualWidth / 2, this.ActualHeight / 2));
            }
             * 
    */

        }

    }



    4、PasswordBox.xaml
    <UserControl x:Class="Silverlight20.Control.PasswordBox"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml">
        
    <StackPanel HorizontalAlignment="Left">
            
            
    <!--
            Password - PasswordBox控件的密码值
            PasswordChar - PasswordBox控件所显示的密码替代字符。默认值为“●”
            
    -->
            
    <PasswordBox Width="200" PasswordChar="*"></PasswordBox>
            
        
    </StackPanel>    
    </UserControl>


    5、ProgressBar.xaml
    <UserControl x:Class="Silverlight20.Control.ProgressBar"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml">
        
    <StackPanel HorizontalAlignment="Left">
            
            
    <TextBlock x:Name="lblPercent" TextAlignment="Center" />
            
    <!--
            Minimum - ProgressBar控件的最小值。参见基类System.Windows.Controls.Primitives.RangeBase
            Maximum - ProgressBar控件的最大值。参见基类System.Windows.Controls.Primitives.RangeBase
            Value - ProgressBar控件的值。参见基类System.Windows.Controls.Primitives.RangeBase
            ValueChanged - ProgressBar控件的值发生变化时所触发的事件
            
    -->
            
    <ProgressBar x:Name="progressBar" Width="200" Height="20" Minimum="10" Maximum="70"></ProgressBar>

            
    <!--
            IsIndeterminate - 是否无法确定当前的进度值
                false - 可以确定当前的进度值
                true - 无法确定当前的进度值。一个Loading动画
            
    -->
            
    <ProgressBar Width="200" Height="20" IsIndeterminate="True" Margin="5"></ProgressBar>

       
    </StackPanel>
    </UserControl>

    ProgressBar.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;

    namespace Silverlight20.Control
    {
        
    public partial class ProgressBar : UserControl
        
    {
            Storyboard _loop 
    = new Storyboard();
            
    int _count = 0;

            
    public ProgressBar()
            
    {
                InitializeComponent();

                ProgressBarDemo();
            }


            
    void ProgressBarDemo()
            
    {
                _loop.Duration 
    = TimeSpan.FromMilliseconds(100d);
                _loop.Completed 
    += new EventHandler(_loop_Completed);
                _loop.Begin();
            }


            
    void _loop_Completed(object sender, EventArgs e)
            
    {
                progressBar.Value 
    = _count;
                lblPercent.Text 
    = _count.ToString() + "%";

                
    if (_count > 100)
                    _count 
    = 0;
                
    else
                    _count
    ++;

                _loop.Begin();
            }

        }

    }



    6、RadioButton.xaml
    <UserControl x:Class="Silverlight20.Control.RadioButton"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml">
        
    <StackPanel HorizontalAlignment="Left">
            
            
    <!--
            GroupName - RadioButton控件所属组的组名
            Checked - 被选中后所触发的事件
            Click - 被单击后所触发的事件
            
    -->
            
    <RadioButton GroupName="groupName" Content="红色的RadioButton" Background="Red" Margin="5" />
            
            
    <!--
            IsEnabled - RadioButton是否有效
            
    -->
            
    <RadioButton GroupName="groupName" Content="无效的RadioButton" IsEnabled="False" Margin="5" />

            
    <!--
            IsChecked - 是否被选中
            RadioButton.Content - RadioButton所对应的内容
            
    -->
            
    <RadioButton GroupName="groupName" Margin="5" IsChecked="true">
                
    <RadioButton.Content>
                    
    <Image Source="/Silverlight20;component/Images/Logo.jpg" Width="200" />
                
    </RadioButton.Content>
            
    </RadioButton>
            
        
    </StackPanel>
    </UserControl>


    OK
    [源码下载]
  • 相关阅读:
    项目结队开发---NABC分析(成员)
    梦断代码读后感(二)
    梦断代码读后感(一)
    首尾相连的循环数组求其子数组最大值
    子数组求和之大数溢出
    梦断代码读后感——终结
    软件工程结对开发——一维最大子数组求和溢出问题
    结对开发——求环形一维数组最大子数组的和
    结对开发——电梯调度问题需求分析
    软件工程——求二维数组所有子矩阵的和的最大值
  • 原文地址:https://www.cnblogs.com/webabcd/p/1312284.html
Copyright © 2020-2023  润新知