zoukankan      html  css  js  c++  java
  • [Silverlight]一个简单的GroupBox控件

    Silverlight没有提供GroupBox控件,自己动手写了一个。

    Generic.xaml文件:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Sample" 
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
    
        <Style TargetType="local:GroupBox">
            <Setter Property="Background" Value="White"></Setter>
            <Setter Property="BorderBrush" Value="#687B8B"></Setter>
            <Setter Property="BorderThickness" Value="1"></Setter>
            <Setter Property="Padding" Value="6,10,6,6"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:GroupBox">
                        <Grid>
                            <Border Margin="0,8,0,0" CornerRadius="5"
                                    Background="{TemplateBinding Background}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}">
                                <ContentPresenter Margin="{TemplateBinding Padding}" ></ContentPresenter>
                            </Border>
                            <Border Margin="10,0,10,0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top"
                                    Background="{TemplateBinding Background}" >
                                <TextBlock Margin="5,0" Text="{TemplateBinding Title}" ></TextBlock>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

    GroupBox.cs文件:

    using System.Windows;
    using System.Windows.Controls;
    
    namespace Sample
    {
        /// <summary>
        /// 分组框。
        /// </summary>
        public class GroupBox : ContentControl
        {
            public GroupBox()
            {
                this.DefaultStyleKey = typeof(GroupBox);
            }
    
            public static readonly DependencyProperty TitleProperty =
                DependencyProperty.Register("Title", typeof (string), typeof (GroupBox), null);
    
            /// <summary>
            /// 获取或设置标题。
            /// </summary>
            public string Title
            {
                get { return (string) GetValue(TitleProperty); }
                set { SetValue(TitleProperty, value); }
            }
        }
    }

    使用示例代码:

    <UserControl x:Class="AutoCompleteBoxSample.GroupBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Sample" Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Margin="30" Background="White">
            <local:GroupBox Title="GroupBox的标题" >
                <Button Content="GroupBox的内容"></Button>                
            </local:GroupBox>
        </Grid>
    </UserControl>

    示例效果图:

    image

    2010.04.28 补充:

    如果使用Silverlight ToolKit,GroupBox类还可以直接从Silverlight ToolKit类库中的HeaderedContentControl类继承。改为从HeaderedContentControl类继承后,不仅代码更少,而且看上去更“Silverlight”一些。修改后的代码如下:

    Generic.xaml文件:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Sample" 
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
        <Style TargetType="local:GroupBox">
            <Setter Property="Background" Value="White"></Setter>
            <Setter Property="BorderBrush" Value="#687B8B"></Setter>
            <Setter Property="BorderThickness" Value="1"></Setter>
            <Setter Property="Padding" Value="6,10,6,6"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:GroupBox">
                        <Grid>
                            <Border Margin="0,8,0,0" CornerRadius="5"
                                    Background="{TemplateBinding Background}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}">
                                <ContentPresenter Margin="{TemplateBinding Padding}" Content="{TemplateBinding Content}" ></ContentPresenter>
                            </Border>
                            <Border Margin="10,0,10,0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top"
                                    Background="{TemplateBinding Background}" >
                                <ContentPresenter Margin="5,0" Content="{TemplateBinding Header}"></ContentPresenter>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

    GroupBox.cs文件:

    using System.Windows.Controls;
    
    namespace AutoCompleteBoxSample
    {
        /// <summary>
        /// 分组框。
        /// </summary>
        public class GroupBox : HeaderedContentControl
        {
            public GroupBox()
            {
                this.DefaultStyleKey = typeof(GroupBox);
            }
        }
    }

    使用示例代码:

    <UserControl x:Class="AutoCompleteBoxSample.GroupBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Sample" Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Margin="30" Background="White">
            <local:GroupBox Header="GroupBox的标题" >
                <Button Content="GroupBox的内容"></Button>                
            </local:GroupBox>
        </Grid>
    </UserControl>

    示例效果图与上图一样。当然,由于修改后的Header属性是object类型,所以如果你乐意的话,完全可以使用Button、Rectangle…做作GroupBox的Header,虽然我并不认为这是更好的做法。

  • 相关阅读:
    石头剪刀布技巧+个人经验总结
    能让你聪明的工作DEAL四法则,来自《每周工作四小时》书籍
    开发软件名称简写定义表
    罗永浩简历(自荐新东方的简历)
    感人微电影 《健康树》金赫及作品简介
    陈寅恪
    中国朝代顺序表
    Loading...加载图收集
    KeyBoardUtils.java——android键盘工具类
    LogUtils.java
  • 原文地址:https://www.cnblogs.com/chinadhf/p/1722284.html
Copyright © 2011-2022 走看看