惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 同一片海

Win10 资源管理器窗口无边框的问题 Android Studio发布Release版本之坑--Unknown host 'd29vzk4ow07wi7.cloudfront.net' 浏览器外部署Silverlight更新检查失败的原因及对策 C#调用非托管Dll时的参数传递 使用ATL开发ActiveX控件 大数据量传输时配置WCF的注意事项 Silverlight自定义主题 在Silverlight 3中使用主题 [Silverlight]Selector类到底有没有SelectedValue属性? WCF安全之ASP.NET兼容模式 WCF安全之customBinding [Silverlight]AutoCompleteBox控件的一个Bug? [Silverlight]DataGrid相关的几个小知识点 实现下拉列表支持DataGrid的AutoCompleteBox 可分片数据持久层-ShardingPL使用说明 Silverlight数据绑定中的可空类型与自定义转换器 - 同一片海 一个丑陋的对Silverlight中的Grid无CellPadding的解决方案 - 同一片海 Silverlight中的资源文件 - 同一片海 - 博客园 【分享】SqlServer数据库文档生成工具
[Silverlight]一个简单的GroupBox控件
同一片海 · 2010-04-27 · via 博客园 - 同一片海

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,虽然我并不认为这是更好的做法。