Jak ustawić limit na zaznaczanie Checkboxów w StackPanelu?

0

Witam,

W StackPanelu mam wygenerowane CheckBoxy.

Jak spowodować aby StackPanel "IsEnabled" była na false w momencie, kiedy zaznaczę np. 2 Checkboxy, które są w tym StackPanelu.

0

Pierwszy strzal to taki, zeby w zdarzeniach OnClick/OnCheckChangetych checkboxow zliczac ile jest Checked i w przypadku gdy jest dwa to ustawic IsEnabled na false.

Ewentualnie, ładniejszą opcją byłby podbijanie jakieś flagi przy checkowaniu checkboxow, flage zbindowac z IsEnabled panelu i voila;)

0

Używasz MVVM czy nie ?

0

Nie korzystam z MVVM, niestety nie znam tego wzorca :(

Zrobiłem to w ten sposób

Po stronie XAML:

 <StackPanel x:Name="stackPanelForMap" VerticalAlignment="Center" HorizontalAlignment="Center" >
            <StackPanel.Resources>
                <Style TargetType="{x:Type CheckBox}">
                    <EventSetter Event="Checked" Handler="CheckBox_Checked"/>
                </Style>
            </StackPanel.Resources>
 </StackPanel>

Po stronie kodu:

private void CheckBox_Checked(object sender, RoutedEventArgs e)
            {
                a++;
                if(a >= counter)  //counter to ilość dozwolonych CheckBoxów do wyboru
                {
                    stackPanelForMap.IsEnabled = false;
                    MessageBox.Show("Wybrałeś maksymalną ilość CheckBoxów!");
                }
            } 
0

A jak ktoś się pomyli? Zaznaczy checkbox A i B, a tak naprawdę będzie chciał A i C?

0

Faktycznie...

Na skróty to mógłbym zrobić button "Zmień" i wtedy isEnabled = true.

0

Albo po prostu zrezygnowac z tego ustawiania IsEnabled na stackPanelu i zwyczajnie obslugiwac to w evencie Checked. Jesli flaga przekroczyla zakres to olej event (

e.handled = true

). Natomiast w przypadku "odeczekowywania" checkboxa flage podbijasz w dol

0

Niestety nie wiem czemu, ale

e.Handled = true

nie reaguje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0