【问题标题】:Check if each radiobutton group has one radiobutton selected/checked检查每个单选按钮组是否选择/选中了一个单选按钮
【发布时间】:2019-09-05 00:38:01
【问题描述】:

我目前正在开发 WPF 应用程序。如果用户单击一个按钮,程序应检查是否选中了每组一个单选按钮。以下是 XAML 的摘录:

<Border Grid.Row="3" Grid.Column="1" BorderBrush="Black" BorderThickness="2" Margin="78,0,0,0" Background="LightGray">
            <WrapPanel x:Name="wrpnlElektro" Height="65" Margin="0,0,0,-12" Background="LightGray" Grid.Column="1" Grid.Row="2" Grid.RowSpan="2" VerticalAlignment="Top">
                <Label x:Name="lblElektro" Content="Elektro" FontWeight="Bold" Margin="20,15,0,15"/>
                <Label x:Name="lblElektroBauseitig" Content="bauseitig" Margin="50,15,0,15" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="Elektro" x:Name="rbElektroBauseitig" Margin="20,22,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <Label x:Name="lblElektroLuxhaus" Content="Luxhaus" Margin="40,15,0,15" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="Elektro" x:Name="rbElektroLuxhaus" Margin="20,22,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            </WrapPanel>
        </Border>

        <Border Grid.Row="4" Grid.Column="1" BorderBrush="Black" BorderThickness="2" Margin="78,0,0,0" Background="LightGray">
            <WrapPanel x:Name="wrpnlSAT" Height="60" Margin="0,0,0,0" Background="LightGray" VerticalAlignment="Top">
                <Label x:Name="lblSAT" Content="SAT-Anlage" FontWeight="Bold" Margin="20,15,0,15"/>
                <Label x:Name="lblSATJa" Content="Ja" Margin="61,15,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="SAT" x:Name="rbSATJa" Margin="20,22,0,22"/>
                <Label x:Name="lblSATVorb" Content="Vorber." Margin="44,15,0,15" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="SAT" x:Name="rbSATVorb" Margin="20,22,0,22"/>
                <Label x:Name="lblSATNein" Content="Nein" Margin="40,15,0,15" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="SAT" x:Name="rbSATNein" Margin="20,22,0,22"/>
            </WrapPanel>
        </Border>

        <Border Grid.Row="5" Grid.Column="1" BorderBrush="Black" BorderThickness="2" Margin="78,0,0,0" Background="LightGray">
            <WrapPanel x:Name="wrpnlPV" Margin="0,0,0,-8" Background="LightGray">
                <Label x:Name="lblPV" Content="PV-Anlage" FontWeight="Bold" Margin="20,15,0,15"/>
                <Label x:Name="lblPVJa" Content="Ja" Margin="68,15,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="PV" x:Name="rbPVJa" Margin="20,22,0,22" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <Label x:Name="lblPVVorb" Content="Vorber." Margin="44,15,0,15" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="PV" x:Name="rbPVVorb" Margin="20,22,0,22" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <Label x:Name="lblPVNein" Content="Nein" Margin="40,15,0,15" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <RadioButton GroupName="PV" x:Name="rbPVNein" Margin="20,22,0,22" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            </WrapPanel>
        </Border>

所以基本上我是说:“用户,如果您没有为每个“单选按钮容器”选择一个,那么会出现一个带有警告的 MessageBox。

如何在 XAML 或代码隐藏中执行此操作?如果可能,请给我一个代码示例而不是指导性评论。非常感谢!

【问题讨论】:

  • 默认情况下为每个组中的第一个 RadioButton 设置 IsChecked=true。那么您将不需要您的验证
  • @ASh:这是不可能的,因为不能有默认选择。
  • 当您将单选按钮放入组中时,总会有一个默认选择。

标签: c# wpf xaml radio-button


【解决方案1】:

默认为每个组中的第一个 RadioButton 设置IsChecked=true。它不能从 UI 中取消选中,然后您将不需要验证。

或者,检查每个组:

bool success = 
     (rbElektroBauseitig.IsChecked == true || rbElektroLuxhaus.IsChecked == true) &&
     (rbSATJa.IsChecked == true || rbSATVorb.IsChecked == true  || rbSATVorb.IsChecked == true) &&
     (rbPVJa.IsChecked == true || rbPVVorb.IsChecked == true  || rbPVNein.IsChecked == true);

if (!success) 
     MessageBox.Show("Dear User, you didn't make selection");

【讨论】:

    【解决方案2】:

    另外,你可以使用 Linq

    您将为每个容器创建一个语句。如果返回的变量为空,则没有选择任何内容。这也将返回 RadioButton,包括它的所选项目的名称。

        var ElektroGroup = wrpnlElektro.Children.OfType<RadioButton>().FirstOrDefault(x => x.IsChecked.Value);
    
        if(ElektroGroup == null || ...any other group == null...)
        {
            //TODO nothing found
            return;
        }
    

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2016-09-26
      • 2021-10-21
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多