zoukankan      html  css  js  c++  java
  • Silverlight学习笔记十自定义SilverLight对话框

    今天这一讲是用SilverLight作的自定义对话框(提示、警告、错误)

    效果如图

    一、定义俩个枚举类型BoxButton、MessageBoxType

    1.BoxButton.cs它的目的在于指示按钮的类型。

     /// <summary>
        /// 按钮类型
        /// </summary>
        public enum BoxButton
        {
            /// <summary>
            /// 关闭按钮
            /// </summary>
            OK = 0,

            /// <summary>
            /// 确定、取消按钮
            /// </summary>
            OKCancel = 1,

            /// <summary>
            /// 是、否按钮
            /// </summary>
            YesOrNo = 2
        }

    2.MessageBoxType.cs是对话框的类型(提示,错误,警告)

     /// <summary>
        /// 对话框类型
        /// </summary>
        public enum MessageBoxType
        {
            /// <summary>
            /// 错误对话框
            /// </summary>
            Error = 0,

            /// <summary>
            /// 警告对话框
            /// </summary>
            Warnnig = 1,

            /// <summary>
            /// 提示对话框
            /// </summary>
            Info = 2
        }

    二、窗体程序

    1.SLMessageBox.xaml

    <controls:ChildWindow x:Class="Silverlight.Common.View.SLMessageBox"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
               xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
               MinWidth="200" MinHeight="120" 
               Title="提示" >

        <Grid x:Name="LayoutRoot" Margin="2">
            <Grid.RowDefinitions>
                <RowDefinition  Height="6"/>
                <RowDefinition  Height="30"/>
                <RowDefinition  Height="6"/>
                <RowDefinition Height="50" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition  Width="90"/>

                <ColumnDefinition Width="90" />
            </Grid.ColumnDefinitions>
            <Image Grid.Row="1" Width="16" Height="16"  Grid.Column="0" HorizontalAlignment="Left"  x:Name="msgPic"></Image>
            <TextBlock Grid.Row="1" Grid.ColumnSpan="2" x:Name="message" HorizontalAlignment="Center" VerticalAlignment="Center"/>

            <Button x:Name="btnOK"  Content="确定" Click="btnOK_Click"  Width="40" Height="23"  VerticalAlignment="Center" HorizontalAlignment="Center"   Grid.Row="23"  Grid.Column="0" HorizontalContentAlignment="Center"/>
            <Button x:Name="btnCancel"  Content="取消" Click="btnCancel_Click"  Width="40" Height="23"  VerticalAlignment="Center" HorizontalAlignment="Center"   Grid.Row="3"  Grid.Column="1"  HorizontalContentAlignment="Center"/>
            <Button x:Name="btnClose"  Content="关闭" Click="btnClose_Click"  Width="40" Height="23"  VerticalAlignment="Center" HorizontalAlignment="Center"   Grid.Row="3"  Grid.ColumnSpan="2" Visibility="Collapsed"  HorizontalContentAlignment="Center"/>

        </Grid>
    </controls:ChildWindow>

    2.SLMessageBox.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.Media.Imaging;
    using Silverlight.Common.Core;

    namespace Silverlight.Common.View
    {
        public partial class SLMessageBox : ChildWindow
        {
            public SLMessageBox()
            {
                InitializeComponent();

        this.msgPic.Source = new BitmapImage(new Uri("http://images.cnblogs.com/info.jpg", UriKind.Relative));
            }

            /// <summary>
            /// 委托
            /// </summary>
            private Action showDialogHandler;

            #region 简单对话框
            /// <summary>
            /// 确定、取消对话框
            /// </summary>
            /// <param name="showDialogHandler">点击确定后要执行的方法</param>
            /// <param name="msg">信息</param>
            /// <param name="caption">对话框标题</param>
            public void showDialog(Action showDialogHandler, string msg, string caption)
            {
                this.message.Text = msg;
                if (!string.IsNullOrEmpty(caption))
                {
                    this.Title = caption;
                }

                this.showDialogHandler = showDialogHandler;
                this.Show();
            }

            #endregion

            #region 对话框

            /// <summary>
            ///显示对话框
            /// </summary>
            /// <param name="showDialogHandler">点击“确定”按钮或“是”按钮后要执行的方法</param>
            /// <param name="msgType">对话框类型(16×16)</param>
            /// <param name="msg">显示的信息</param>
            /// <param name="caption">对话框标题</param>
            /// <param name="button">按钮样式</param>
            public void showDialog(Action showDialogHandler, string msg, MessageBoxType msgType, string caption, BoxButton button)
            {
                #region 信息

                this.message.Text = msg;

                #endregion

                #region 对话框标题

                if (!string.IsNullOrEmpty(caption))
                {
                    this.Title = caption;
                }

                #endregion

                #region 图片样式

                switch (msgType)
                {
                    case MessageBoxType.Error:
                        this.msgPic.Source = new BitmapImage(new Uri("../images/error.jpg", UriKind.Relative));
                        break;

                    case MessageBoxType.Warnnig:
                        this.msgPic.Source = new BitmapImage(new Uri("../images/warning.jpg", UriKind.Relative));
                        break;

                    case MessageBoxType.Info:
                        this.msgPic.Source = new BitmapImage(new Uri("../images/info.jpg", UriKind.Relative));
                        break;
                }

                #endregion

                #region 按钮样式

                switch (button)
                {
                    case BoxButton.OK:
                        this.btnCancel.Visibility = Visibility.Collapsed;
                        this.btnOK.Visibility = Visibility.Collapsed;
                        this.btnClose.Visibility = Visibility.Visible;
                        break;

                    case BoxButton.OKCancel:
                        this.btnCancel.Visibility = Visibility.Visible;
                        this.btnOK.Visibility = Visibility.Visible;
                        this.btnClose.Visibility = Visibility.Collapsed;
                        this.showDialogHandler = showDialogHandler;
                        break;

                    case BoxButton.YesOrNo:
                        this.btnCancel.Content = "否";
                        this.btnOK.Content = "是";
                        this.btnCancel.Visibility = Visibility.Visible;
                        this.btnOK.Visibility = Visibility.Visible;
                        this.btnClose.Visibility = Visibility.Collapsed;
                        this.showDialogHandler = showDialogHandler;
                        break;
                }

                #endregion

                this.Show();
            }

            #endregion

            #region 按钮事件

            private void btnOK_Click(object sender, RoutedEventArgs e)
            {
                this.DialogResult = true;

                if (this.showDialogHandler != null)
                {
                    this.showDialogHandler();
                }
            }

            private void btnCancel_Click(object sender, RoutedEventArgs e)
            {
                this.DialogResult = false;
            }

            private void btnClose_Click(object sender, RoutedEventArgs e)
            {
                this.Close();
            }

            #endregion
        }
    }

    3.是一个DataGrid用来演示效果的,前面已经介绍过了,在http://www.cnblogs.com/salam/archive/2010/07/12/1775891.html地址,本节中只是在

      <datagrid:DataGrid x:Name="dataGrid"  Width="820" Height="310" ColumnWidth="100"  ItemsSource="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="4" MaxHeight="300" Grid.Column="1">中增加了右键菜单,用来演示自定义对话框。
                    <input:ContextMenuService.ContextMenu>
                        <input:ContextMenu>
                            <input:MenuItem Header="分组显示" x:Name="cmiGrouping" Click="cmiGrouping_Click">
                                <input:MenuItem.Icon>
                                    <Image Source="../Images/File.png"/>
                                </input:MenuItem.Icon>
                            </input:MenuItem>

                            <input:MenuItem Header="只读" x:Name="cmiOrder" Click="cmiOrder_Click">
                                <input:MenuItem.Icon>
                                    <Image Source="../Images/key.png"/>
                                </input:MenuItem.Icon>
                            </input:MenuItem>

                            <input:MenuItem Header="删除" x:Name="cmiDelete" Click="cmiDelete_Click">
                                <input:MenuItem.Icon>
                                    <Image Source="../Images/ButtonSaveAndClose.png"/>
                                </input:MenuItem.Icon>
                            </input:MenuItem>
                           
                        </input:ContextMenu>
                    </input:ContextMenuService.ContextMenu>
                    <datagrid:DataGrid.RowDetailsTemplate>
                        <DataTemplate>
                            <StackPanel Background="LightBlue">
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="This item has details." />
                                </StackPanel>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="Here is some data: " />
                                    <TextBlock Text="{Binding Name}" />
                                    <TextBlock Text=" " />
                                    <TextBlock Text="{Binding Password}" />
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </datagrid:DataGrid.RowDetailsTemplate>
                </datagrid:DataGrid>

     

    其它的就不多说了在http://www.cnblogs.com/salam/archive/2010/07/12/1775891.html已写啦。呵呵!本人比较懒

    在这顺便说一下,如果能在程序中用枚举,还是不错的,我鼓励大家试着用。由于本人也是初学,所以大家不要见笑啊。

    源代码地址:https://files.cnblogs.com/salam/Silverlight.Common.rar

     

     

     

  • 相关阅读:
    How to use epoll? A complete example in C
    分享:libzip 0.11 发布,C 语言的 zip 压缩开发包
    linux AIO (异步IO) 那点事儿
    通过引用计数解决野指针的问题(C&C++)
    [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) _Boz 博客园
    基于EPOLL写的HTTP服务器(加入了线程池)_没落都城_新浪博客
    jQuery检测浏览器名称和版本信息
    Jquery.ajax中dataType不可少
    jquery 手风琴效果
    ie下ajax错误:由于出现错误 c00ce56e 而导致此项操作无法完成
  • 原文地址:https://www.cnblogs.com/salam/p/1776912.html
Copyright © 2011-2022 走看看