WPF中RadioButton的分组

摘要:
当界面上出现多组Radiobutton时,将所有的Radiobutton写在同一个Grid里面,导致系统认为所有的Radiobutton是同一组,造成选择混乱,解决的方法:1.要为属于同个组的Radiobutton设置相同的GroupName,绑定同一个变量;2.若没有为Radiobutton设置GroupName,则将属于同一组的Radiobutton放在一个容器中,如wrappannel里面。

当界面上出现多组Radiobutton时,将所有的Radiobutton写在同一个Grid里面,导致系统认为所有的Radiobutton是同一组,造成选择混乱,解决的方法:

1.要为属于同个组的Radiobutton设置相同的GroupName,绑定同一个变量;

2.若没有为Radiobutton设置GroupName,则将属于同一组的Radiobutton放在一个容器中,如wrappannel里面。

通常为Radiobutton设置转化器,将不同的button上对应的值,与选中与不选中进行转换,下面展示例子,示例中有三种转换器:EnumToBoolConverter,IntToBoolConverter,FloatToBoolConverter。代码如下(示例采用的MVVM模式):

///model中代码

       public enumProtocolTypeDefine
        {
            RS232,            
            RS485            
        }

        privateProtocolTypeDefine _protocolType;
        private int_dataBits;    
        private float_stopBits;
        /// <summary>
        ///协议类型
        /// </summary>
        publicProtocolTypeDefine ProtocolType
        {
            get{
                return_protocolType;
            }
            set{
                _protocolType =value;
               RaisePropertyChanged( ()=>ProtocolType );
            }
        }

        /// <summary>
        ///数据位
        /// </summary>
        public intDataBits
        {
            get{
                return_dataBits;
            }
            set{
                _dataBits =value;
               RaisePropertyChanged( ()=>DataBits );
            }
        }
        /// <summary>
        ///停止位
        /// </summary>
        public floatStopBits
        {
            get{
                return_stopBits;
            }
            set{
                _stopBits =value;
                RaisePropertyChanged( ()=>StopBits );
            }
        }

//view.xaml中代码

<UserControl.Resources>
  <local:IntToBoolConverter x:Key="IntToBoolConverter"></local:IntToBoolConverter>
  <local:FloatToBoolConverter x:Key="FloatToBoolConverter"></local:FloatToBoolConverter>
  <local:EnumToBoolConverter x:Key="EnumToBoolConverter"></local:EnumToBoolConverter>
</UserControl.Resources>

<RadioButton Grid.Row="0"Grid.Column="0"Content="RS232"IsChecked="{Binding SerialSetModel.ProtocolType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter= 0 }"HorizontalAlignment="Left"VerticalAlignment="Center"/>
<RadioButton Grid.Row="0"Grid.Column="1"Content="RS485"IsChecked="{Binding SerialSetModel.ProtocolType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter= 1 }"HorizontalAlignment="Left"VerticalAlignment="Center"/>


<RadioButton Grid.Row="2"Grid.Column="1"GroupName="DataBits"Content="6"IsChecked="{Binding SerialSetModel.DataBits, Converter ={StaticResource IntToBoolConverter}, ConverterParameter= 6}"></RadioButton>
<RadioButton Grid.Row="2"Grid.Column="2"GroupName="DataBits"Content="7"IsChecked="{Binding SerialSetModel.DataBits, Converter ={StaticResource IntToBoolConverter}, ConverterParameter= 7}"></RadioButton>
<RadioButton Grid.Row="2"Grid.Column="3"GroupName="DataBits"Content="8"IsChecked="{Binding SerialSetModel.DataBits, Converter ={StaticResource IntToBoolConverter}, ConverterParameter= 8}"></RadioButton>
<TextBlock Grid.Row="3"Grid.Column="0"Text="停止位:"></TextBlock>
<RadioButton Grid.Row="3"Grid.Column="1"GroupName="StopBits"Content="1"IsChecked="{Binding SerialSetModel.StopBits, Converter={StaticResource FloatToBoolConverter},ConverterParameter= 1}"></RadioButton>
<RadioButton Grid.Row="3"Grid.Column="2"GroupName="StopBits"Content="1.5"IsChecked="{Binding SerialSetModel.StopBits, Converter={StaticResource FloatToBoolConverter},ConverterParameter= 1.5}"></RadioButton>
<RadioButton Grid.Row="3"Grid.Column="3"GroupName="StopBits"Content="2"IsChecked="{Binding SerialSetModel.StopBits, Converter={StaticResource FloatToBoolConverter},ConverterParameter= 2}"></RadioButton>

//view.cs中的代码

    public classEnumToBoolConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, objectparameter, System.Globalization.CultureInfo culture)
        {
            int data = (int)value;
            string name =parameter.ToString();
            switch(name)
            {
                case "0":
                    return data == 0;
                case "1":
                    return data == 1;
                default:
                    return false;
            }
        }

        public object ConvertBack(object value, Type targetType, objectparameter, System.Globalization.CultureInfo culture)
        {
            return (ProtocolTypeDefine)int.Parse(parameter.ToString());
        }
    }

    public classIntToBoolConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, objectparameter, System.Globalization.CultureInfo culture)
        {
            int data = (int)value;

            string name =parameter.ToString();
            switch(name)
            {
                case "6":
                    return data == 6;
                case "7":
                    return data == 7;
                case "8":
                    return data == 8;
                default:
                    return false;
            }
        }

        public object ConvertBack(object value, Type targetType, objectparameter, System.Globalization.CultureInfo culture)
        {
            var data = (bool)value;
            if(data)
            {
                returnSystem.Convert.ToInt32(parameter);
            }
            return -1;
        }
    }

    public classFloatToBoolConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, objectparameter, System.Globalization.CultureInfo culture)
        {
            float data =0f;
            if (!float.TryParse(value.ToString(), outdata))
            {
                return false;
            }
            string name =parameter.ToString();
            switch(name)
            {
                case "1":
                    return data == 1;
                case "1.5":
                    return data == 1.5;
                case "2":
                    return data == 2;
                default:
                    return false;
            }
        }

        public object ConvertBack(object value, Type targetType, objectparameter, System.Globalization.CultureInfo culture)
        {
            var data = (bool)value;
            if(data)
            {
                returnSystem.Convert.ToSingle(parameter);
            }
            return -1;
        }
    }

//model中代码

    //协议 
    SerialSetModel.ProtocolType = 0;
    //数据位
    SerialSetModel.DataBits = 8;
    //停止位
    SerialSetModel.StopBits = 1;

在此只贴出重要部分代码,使用时只要按照该原理进行组装即可。
WPF中RadioButton的分组第1张

免责声明:文章转载自《WPF中RadioButton的分组》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇openstack--neutron--service(lb、Security group、FW)ASP.Net缓存总结(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF简介:VS创建桌面应用程序

1、简介 1/ 什么是WPF WPF,Windows Presentation Foundation也,译过来就是“Windows呈现基础”,你看它的目的非常明确,就是用来把数据“显示”给用户看的(说白了就是用来做UI的)。如果只是给用户显示几串文本、两三张图片或者几个表格那WPF就太糗了,幸乎,WPF可不是这等素食动物——大家都见过Flash动画吧,WP...

继续聊WPF——用Blend自定义Listview控件的列表头

在Blend中右击ListView控件,从样式和模板相关的菜单项中,我们没找到与列表头有关的项。 然后,我们到属性面板中找GridView的ColumnHeaderContainerStyle属性,结果你发现,就算你在高级选项菜单中把它转换为本地资源,你会发现它没有反应,切换到XAML视图也没看到生成的代码。 那是不是没办法了呢?这个问题我想了想...

串口通信类,WPF

参考之前的资料,写了一个自己常用的串口类, 字符串发送类型用了两种方式,char[] 和byte[] ; 数据接收也是采用两种 char[] 和byte[] 两种。 类代码贴出来: public class SerialPortManager { private bool _recStaus = true;//接收状态字...

Wpf 自定义控件(1)

1. 新建一个wpf工程,在工程下面新建  一个文件夹themes,在themes下新建两个资源字典文件generic.xaml和PrettySeekBar.xaml generic.xaml   <ResourceDictionary xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/pr...

WPF ClickOnce应用程序IIS部署发布攻略

WPF程序非常适合公司内网使用,唯一缺点就是客户端要安装.net框架4.0。优势也很明显,在客户端运行的是一个WinForm程序,自动下载,可以充分利用客户机的性能,而且是以当前的Windows用户权限运行,避免了权限带来的问题。而我觉得最大的益处还是可以自动更新!这样就具备了CS程序功能强大速度快的优点,又有BS程序部署升级容易的优点。 本文要讨论的就是...

WPF界面开发技巧大放送!DevExpress WPF格式化日期时间值

DevExpress广泛应用于ECM企业内容管理、 成本管控、进程监督、生产调度,在企业/政务信息化管理中占据一席重要之地。通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能...