您的位置:首页 > 其它

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

2008-10-16 08:58 711 查看
[索引页]
[源码下载]

[align=center]稳扎稳打Silverlight(5) - 2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton[/align]

作者: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
[源码下载]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐