none
Xaml/C#: Checkbox.Checked funktioniert nicht RRS feed

  • Frage

  • Hallo zusammen,

    ich arbeite z.Z. an einer App, die auch einen Fehlerreport enthält.

    Dieser wurde als UserControl designt und der sieht wie folgt aus:

    <ListView Grid.Row="1" x:Name="ErrorList" Background="Beige" >
                <ListViewItem>
                      <CheckBox x:Name="Option1_CheckBox" Content="Fehler beim Inhalt oder Grammatik" 
                                          Style="{StaticResource NewCheckBoxStyle}" Checked="Option_Checked"/>
                    
                </ListViewItem>
               <ListViewItem>
                     <CheckBox x:Name="Option2_CheckBox" Content="Fenster öffnet sich nicht" 
                                          Style="{StaticResource NewCheckBoxStyle}" Checked="Option_Checked"/>
               </ListViewItem>
              <ListViewItem>
                    <CheckBox x:Name="Option3_CheckBox" Content="Falsche Parameteranzeige" 
                                          Style="{StaticResource NewCheckBoxStyle}" Checked="Option_Checked"/>
              </ListViewItem>
                     </ListView>
                

    Jetzt versuche ich schon "ewig" hinzubekommen, dass wenn eine Checkbox angeklickt wird, alle anderen unchecked sind.
    Wie macht man das? Z.b. if(Option3_Checkbox = true) Option1_Checkbox && Option2_Checkbox.unchecked funktioniert nicht.

    Habt ihr vielleicht eine Idee?

    Vielen Dank und einen schönen Abend.

    LG Michael

    Montag, 15. Mai 2017 21:23

Antworten

  • Oder falls es mal mehr werden sollten geht das auch "eleganter":
    var thisCheckBox = sender as CheckBox;
    var ctrls = new CheckBox[]{ CheckBox1, CheckBox2, CheckBox3};
    foreach(var ctrl in ctrls)
    {
      if(ctrl != thisCheckBox){
        ctrl.IsChecked = false;
      }
    }
    Allerdings verwirrt es den Nutzer mehr, als dass es ihm hilft. Für derartige Funktionen gibt es die von Dimitar erwähnten RadioButtons.

    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub

    • Als Antwort markiert Michael80xxx Mittwoch, 17. Mai 2017 20:44
    Dienstag, 16. Mai 2017 22:14
  • Hallo Michael,

    eine einfach Möglichkeit, wäre das hier. 

    <StackPanel VerticalAlignment="Top">
                <CheckBox x:Name="chk1" Content="Chk1" Checked="CheckBox_Checked" />
                <CheckBox x:Name="chk2" Content="Chk2" Checked="CheckBox_Checked" />
                <CheckBox x:Name="chk3" Content="Chk3" Checked="CheckBox_Checked" />
            </StackPanel>

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
            {
                var chk = sender as CheckBox;
    
                if (chk == chk1)
                {
                    chk2.IsChecked = false;
                    chk3.IsChecked = false;
                }
                else if (chk == chk2)
                {
                    chk1.IsChecked = false;
                    chk3.IsChecked = false;
                }
                else if (chk == chk3)
                {
                    chk1.IsChecked = false;
                    chk2.IsChecked = false;
                }
            }


    Gruß, Thomas

    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!

    Icon für UWP

    • Als Antwort markiert Michael80xxx Mittwoch, 17. Mai 2017 20:44
    Dienstag, 16. Mai 2017 21:13

Alle Antworten

  • Hallo Michael,

    Wenn nur eine Option ausgewählt werden kann, wäre vielleicht das Optionsfeld geeigneter:
    RadioButton Class

    Wenn Du dies trotzdem mit Kontrollkästchen bewerkstelligen möchtest, sieh Dir das Verfahren in folgendem Thread an (ist zwar für Windows Phone 8, aber sollte mit minimalem Aufwand auch auf die Universelle Windows-Plattform anpassbar sein):
    Allow user to select only one Checkbox at a time in LongListSelector Windows Phone 8 App (für das Ersetzen von LongListSelector siehe hier)

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 16. Mai 2017 20:53
    Moderator
  • Hallo Michael,

    eine einfach Möglichkeit, wäre das hier. 

    <StackPanel VerticalAlignment="Top">
                <CheckBox x:Name="chk1" Content="Chk1" Checked="CheckBox_Checked" />
                <CheckBox x:Name="chk2" Content="Chk2" Checked="CheckBox_Checked" />
                <CheckBox x:Name="chk3" Content="Chk3" Checked="CheckBox_Checked" />
            </StackPanel>

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
            {
                var chk = sender as CheckBox;
    
                if (chk == chk1)
                {
                    chk2.IsChecked = false;
                    chk3.IsChecked = false;
                }
                else if (chk == chk2)
                {
                    chk1.IsChecked = false;
                    chk3.IsChecked = false;
                }
                else if (chk == chk3)
                {
                    chk1.IsChecked = false;
                    chk2.IsChecked = false;
                }
            }


    Gruß, Thomas

    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!

    Icon für UWP

    • Als Antwort markiert Michael80xxx Mittwoch, 17. Mai 2017 20:44
    Dienstag, 16. Mai 2017 21:13
  • Oder falls es mal mehr werden sollten geht das auch "eleganter":
    var thisCheckBox = sender as CheckBox;
    var ctrls = new CheckBox[]{ CheckBox1, CheckBox2, CheckBox3};
    foreach(var ctrl in ctrls)
    {
      if(ctrl != thisCheckBox){
        ctrl.IsChecked = false;
      }
    }
    Allerdings verwirrt es den Nutzer mehr, als dass es ihm hilft. Für derartige Funktionen gibt es die von Dimitar erwähnten RadioButtons.

    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub

    • Als Antwort markiert Michael80xxx Mittwoch, 17. Mai 2017 20:44
    Dienstag, 16. Mai 2017 22:14
  • Vielen Dank!

    Das funktioniert wie es soll.

    Einen schönen Abend noch :-)

    LG Michael

    Mittwoch, 17. Mai 2017 20:45