Member 14065662 Ответов: 1

Ограничьте флажки на основе значения combobox


добрый день

Я пытаюсь ограничить количество флажков, чем можно отметить галочкой, уменьшая значение ont he combobox (1 в комбо означает, что 1 поле может быть отмечено галочкой и т. д.). Я не знаю, как это сделать. Пожалуйста, кто-нибудь может помочь.

Спасибо

Что я уже пробовал:

<CheckBox  Content="CB1" HorizontalAlignment="Left"  VerticalAlignment="Top" Height="18" Grid.Row="1" Width="53"  IsChecked="False"  Checked="CheckBoxChecked" Unchecked="CheckBoxUnchecked"/>
 <CheckBox Content="CB2" HorizontalAlignment="Left" VerticalAlignment="Top" Height="18" Grid.Row="1" Width="53" IsChecked="False" />
 <CheckBox Content="CB3" HorizontalAlignment="Left" VerticalAlignment="Top" Height="18" Grid.Row="1" Width="53" IsChecked="False" />
 <CheckBox Content="CB4" HorizontalAlignment="Left"  VerticalAlignment="Top" Height="18" Grid.Row="1" Width="53" IsChecked="False" />

 <Label x:Name="TotalofCheckBoxes" Content="Total" HorizontalAlignment="Left" VerticalAlignment="Top" Height="38" Width="99" FontSize="20" Grid.Row="1" />
 <ComboBox Name="Total" HorizontalAlignment="Left" Margin="549,181,0,0" VerticalAlignment="Top" Width="231" Height="40" FontSize="20" Background="#FF1E2A7F" OpacityMask="White" Foreground="Red"  Grid.Row="1">
     <ComboBoxItem Content="0"  />
     <ComboBoxItem Content="1" />
     <ComboBoxItem Content="2" />
     <ComboBoxItem Content="3" />
     <ComboBoxItem Content="4" />
     <ComboBoxItem Content="5" />
 </ComboBox>

1 Ответов

Рейтинг:
2

AnkushK1

Вам нужно будет обрабатывать это в коде позади. Ниже приведено рабочее решение. Однако лучший способ, который можно было бы рассмотреть, - это использовать свойство зависимости и его обратный вызов вместо событий флажка. Кроме того, в вашем дизайнерском коде были недостатки, которые я должен исправить и удалить некоторые из них.

код XAML:

<CheckBox Grid.Row="0" Content="CB1" HorizontalAlignment="Left"  VerticalAlignment="Top" Height="18" Width="53"  
				   IsChecked="False"  Checked="CheckBoxChecked" Unchecked="CheckBoxUnchecked" IsThreeState="False"/>
		<CheckBox Grid.Row="1" Content="CB2" Checked="CheckBoxChecked" Unchecked="CheckBoxUnchecked" HorizontalAlignment="Left" VerticalAlignment="Top" Height="18" Width="53" IsChecked="False" />
		<CheckBox Grid.Row="2" Content="CB3" Checked="CheckBoxChecked" Unchecked="CheckBoxUnchecked" HorizontalAlignment="Left" VerticalAlignment="Top" Height="18"  Width="53" IsChecked="False" />
		<CheckBox Grid.Row="3" Content="CB4" Checked="CheckBoxChecked" Unchecked="CheckBoxUnchecked" HorizontalAlignment="Left"  VerticalAlignment="Top" Height="18" Width="53" IsChecked="False" />

		<Label Grid.Row="4" x:Name="TotalofCheckBoxes" Content="Total" HorizontalAlignment="Left" VerticalAlignment="Top" Height="38" Width="99" FontSize="20" />
		<ComboBox Grid.Row="5" Name="Total" HorizontalAlignment="Left" VerticalAlignment="Top" SelectionChanged="Total_SelectionChanged">
			<ComboBoxItem Content="0" />
			<ComboBoxItem Content="1" />
			<ComboBoxItem Content="2" />
			<ComboBoxItem Content="3" />
			<ComboBoxItem Content="4" />
			<ComboBoxItem Content="5" />
		</ComboBox>


С фоновым кодом:
public partial class MainWindow : Window
	{
		private System.Collections.Generic.List<CheckBox> SelectedCheckBoxes = new List<CheckBox>();
		private int AllowedChecks = 1;

		public MainWindow()
		{
			InitializeComponent();
		}

		private void CheckBoxChecked(object sender, RoutedEventArgs e)
		{
			CheckBox chk = sender as CheckBox;
			if (chk.IsChecked.Value)
			{
				// Add this selection.
				SelectedCheckBoxes.Add(chk);

				// Make sure we don't have too many.
				if (SelectedCheckBoxes.Count > AllowedChecks)
				{
					// Remove the oldest selection.
					var oldChk = SelectedCheckBoxes.First(ck => ck.IsChecked.Value && ck.Content != chk.Content);
					oldChk.IsChecked = false;

					SelectedCheckBoxes.Remove(oldChk);
				}
			}
			else
			{
				// Remove this selection.
				SelectedCheckBoxes.Remove(chk);
			}
		}

		private void CheckBoxUnchecked(object sender, RoutedEventArgs e)
		{
			CheckBox chk = sender as CheckBox;

			SelectedCheckBoxes.Remove(chk);
		}

		private void Total_SelectionChanged(object sender, SelectionChangedEventArgs e)
		{
			AllowedChecks = Convert.ToInt32((Total.SelectedItem as ComboBoxItem).Content);
			
			// Clear all selections
			// Uncheck all checkboxes
		}
	}