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.
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.
Pierwszy strzal to taki, zeby w zdarzeniach OnClick
/OnCheckChange
tych 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;)
Używasz MVVM czy nie ?
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!");
}
}
A jak ktoś się pomyli? Zaznaczy checkbox A i B, a tak naprawdę będzie chciał A i C?
Faktycznie...
Na skróty to mógłbym zrobić button "Zmień" i wtedy isEnabled = true.
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
Niestety nie wiem czemu, ale
e.Handled = true
nie reaguje.