WPF的Radiobutton使用


當界面上出現多組Radiobutton時,將所有的Radiobutton寫在同一個Grid里面,導致系統認為所有的Radiobutton是同一組,造成選擇混亂,解決的方法:

1.要為屬於同個組的Radiobutton設置相同的GroupName,綁定同一個變量;

2.若沒有為Radiobutton設置GroupName,則將屬於同一組的Radiobutton放在一個容器中,如wrappannel里面。

通常為Radiobutton設置轉化器,將不同的button上對應的值,與選中與不選中進行轉換,下面展示例子,示例中有三種轉換器:EnumToBoolConverter,IntToBoolConverter,FloatToBoolConverter。代碼如下(示例采用的MVVM模式):

///model中代碼

 1    public enum ProtocolTypeDefine
 2     {
 3         RS232,            
 4         RS485            
 5     }
 6  private ProtocolTypeDefine _protocolType;
 7  private int _dataBits;    
 8  private float _stopBits;
 9    /// <summary>
10    /// 協議類型
11    // </summary>
12         public ProtocolTypeDefine ProtocolType
13         {
14             get
15             {
16                 return _protocolType;
17             }
18             set
19             {
20                 _protocolType = value;
21                RaisePropertyChanged( ()=>ProtocolType );
22             }
23         }
24 
25 /// <summary>
26 /// 數據位
27 /// </summary>
28         public int DataBits
29         {
30             get
31             {
32                 return _dataBits;
33             }
34             set
35             {
36                 _dataBits = value;
37                RaisePropertyChanged( ()=> DataBits );
38             }
39         }
40  /// <summary>
41  /// 停止位
42  /// </summary>
43         public float StopBits
44         {
45             get
46             {
47                 return _stopBits;
48             }
49             set
50             {
51                 _stopBits = value;
52                RaisePropertyChanged( ()=>StopBits );
53             }
54         }
Model Code

//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>

cs:
 public class EnumToBoolConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, 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, object parameter, System.Globalization.CultureInfo culture)
        {
            return (ProtocolTypeDefine)int.Parse(parameter.ToString());
        }
    }

    public class IntToBoolConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, 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, object parameter, System.Globalization.CultureInfo culture)
        {
            var data = (bool)value;
            if (data)
            {
                return System.Convert.ToInt32(parameter);
            }
            return -1;
        }
    }

    public class FloatToBoolConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            float data = 0f;
            if (!float.TryParse(value.ToString(), out data))
            {
                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, object parameter, System.Globalization.CultureInfo culture)
        {
            var data = (bool)value;
            if (data)
            {
                return System.Convert.ToSingle(parameter);
            }
            return -1;
        }
    }
View Code

//model中代碼

 //協議 
            SerialSetModel.ProtocolType = 0;
//數據位
            SerialSetModel.DataBits = 8;
 //停止位
            SerialSetModel.StopBits = 1;
View Code

在此只貼出重要部分代碼,使用時只要按照該原理進行組裝即可。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM