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

推荐订阅源

M
MIT News - Artificial intelligence
有赞技术团队
有赞技术团队
S
Schneier on Security
aimingoo的专栏
aimingoo的专栏
T
Troy Hunt's Blog
U
Unit 42
Hacker News - Newest:
Hacker News - Newest: "LLM"
V2EX - 技术
V2EX - 技术
T
The Blog of Author Tim Ferriss
V
Visual Studio Blog
H
Heimdal Security Blog
H
Hacker News: Front Page
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Cloudbric
Cloudbric
Google DeepMind News
Google DeepMind News
C
Cisco Blogs
The Cloudflare Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
MyScale Blog
MyScale Blog
F
Fortinet All Blogs
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
D
DataBreaches.Net
N
News and Events Feed by Topic
Security Archives - TechRepublic
Security Archives - TechRepublic
Forbes - Security
Forbes - Security
Simon Willison's Weblog
Simon Willison's Weblog
F
Full Disclosure
The Register - Security
The Register - Security
L
LINUX DO - 热门话题
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
Intezer
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
K
Kaspersky official blog
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
T
Threatpost
Spread Privacy
Spread Privacy
小众软件
小众软件
AWS News Blog
AWS News Blog
S
Secure Thoughts
S
Security @ Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks

博客园 - sh37

Newtonsoft中的几个妙用 Mvc中ViewData与TempData的区别 SilverLight中Page也可使用泛型基类 cookie操作 - sh37 - 博客园 C# 利用net 命令获取域用户列表 - sh37 利用MessageQueue收发消息 - sh37 - 博客园 C# xmlhttp - sh37 - 博客园 使用ASP获得AD帐号 “域\用户名” - sh37 - 博客园 使用ASP.NET获得AD帐号 - sh37 - 博客园 根據xml文檔數據 給DataTable增加行 JS获取剪贴板内容的代码 - sh37 - 博客园 分页时使当前页码变色 C#生成缩略图 自動生成帶文字的圖片 常用pl/sql vb.net後台抓取網頁內容 ServerVariables集合内容列表 如何动态创建一个按纽 并给这个按纽绑上一个Onclick事件 17种常用正则表达式
Silverlight中利用ListBox特性实现单选按钮组RadioButtonList和复选按钮组CheckBoxList的功能
sh37 · 2011-10-28 · via 博客园 - sh37

用过Silverlight都知道,在Silverlight控件中没有类似于Asp。net中的单选按钮组RadioButtonList和复选按钮组CheckBoxList。

下面就要利用ListBox来实现单选按钮组RadioButtonList和复选按钮组CheckBoxList。

ListBox中有一个SelectionMode的属性来设置单选还是复选,所以我们只需要一个控件就可分别实现RadioButtonList和CheckBoxList两个控件的功能。

代码如下:

 

public class SysChecks : ListBox
    {
        public SysChecks()
        {

            this.DefaultStyleKey = typeof(SysChecks);
            HorizontalAlignment = HorizontalAlignment.Stretch;
            VerticalAlignment = VerticalAlignment.Stretch;

        }
      
       
        public override void OnApplyTemplate()
        {

      //根据单选复选设置不同样式
            if (SelectionMode == SelectionMode.Single)
            {
                this.ItemContainerStyle = HtmlUtility.GetStyle("RadioButtonItem");
            }
            else if (SelectionMode == SelectionMode.Multiple)
            {
                this.ItemContainerStyle = HtmlUtility.GetStyle("CheckBoxItem");
            }
            base.OnApplyTemplate();
          
        }
    }

样式代码如下

 <Style TargetType="local:SysChecks">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"  VerticalAlignment="Top" />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
    </Style>   

<!--单选按钮样式--> 

  <Style x:Key="RadioButtonItem" TargetType="ListBoxItem">
        <Setter Property="Template" >
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem" >
                    <Grid Background="{TemplateBinding Background}" Height="25"   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="Center">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>

                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Opacity" Duration="0" To=".55" />
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualState x:Name="Unselected" />
                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="CheckIcon" Storyboard.TargetProperty="(UIElement.Opacity)" Duration="0" To="1"/>
                                  </Storyboard>
                                </VisualState>
                            </VisualStateGroup>                          
                        </VisualStateManager.VisualStateGroups>
                        <Ellipse x:Name="BoxOuter" Width="14" Height="14"  Stroke="#000000"  StrokeThickness="1" />
                        <Ellipse x:Name="BoxMiddle" Width="12" Height="12" Fill="#FFFFFFFF" Stroke="#FFC4DBEE"  StrokeThickness="1" />
                        <Ellipse x:Name="CheckIcon" Fill="#FF333333" Width="6" Height="6" Opacity="0" />
                        <ContentPresenter Grid.Column="1"
                              x:Name="contentPresenter"
                              Content="{TemplateBinding Content}"
                                           VerticalAlignment="Center"
                              Margin="{TemplateBinding Padding}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

<!--复选按钮样式-->

 <Style x:Key="CheckBoxItem" TargetType="ListBoxItem">
        <Setter Property="Template" >
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem" >
                    <Grid Background="{TemplateBinding Background}" Height="25"   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="Top">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>

                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Opacity" Duration="0" To=".55" />
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualState x:Name="Unselected" />
                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="CheckIcon" Storyboard.TargetProperty="(UIElement.Opacity)" Duration="0" To="1"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Rectangle x:Name="BoxMiddle" Width="14" Height="14" Fill="#FFFFFFFF" Stroke="#FFC4DBEE"  StrokeThickness="1" />
                        <Path x:Name="CheckIcon" Margin="1,1,0,1.5" Fill="#FF333333" Stretch="Fill" Opacity="0" Width="10.5" Height="10"
                              Data="M102.03442,598.79645 L105.22962,597.78918 L106.78825,600.42358 C106.78825,600.42358 108.51028,595.74304 110.21724,593.60419 C112.00967,591.35822 114.89314,591.42316 114.89314,591.42316 C114.89314,591.42316 112.67844,593.42645 111.93174,594.44464 C110.7449,596.06293 107.15683,604.13837 107.15683,604.13837 z"
                              FlowDirection="LeftToRight"/>
                        <ContentPresenter Grid.Column="1"
                              x:Name="contentPresenter"
                              Content="{TemplateBinding Content}"
                              ContentTemplate="{TemplateBinding ContentTemplate}"
                                           VerticalAlignment="Center"
                              Margin="{TemplateBinding Padding}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

效果如如下