Я пытаюсь пропустить дочерние элементы элемента управления вкладкой, чтобы узнать, какие флажки установлены для проверки или проверки. Я нашел различные ответы на SO, но я не могу заставить код делать то, что мне нужно. Вот то, что я до сих пор:Как с помощью CheckBoxes в TabControl с использованием WPF?
foreach (System.Windows.Controls.TabItem page in this.MainWindowTabControl.Items)
{
if(VisualTreeHelper.GetChild(page, 0).GetType() == typeof(System.Windows.Controls.Grid))
{
var grid = VisualTreeHelper.GetChild(page, 0);
int gridChildCount = VisualTreeHelper.GetChildrenCount(grid);
for(int i = 0; i < gridChildCount; i++)
{
if(VisualTreeHelper.GetChild(grid, i).GetType() == typeof(CheckBox))
{
CheckBox box = (CheckBox)VisualTreeHelper.GetChild(grid, i);
if (boxer.IsChecked == true)
checkboxes.Add(box);
}
}
//do work
}
}
Скорее всего, я имею в виду неправильно о том, как класс VisualTreeHelper работ. Я полагаю, что я могу продолжать работать, несмотря на то, что код XAML продолжает перемещаться в более глубокие и глубокие детишки Tab Control? В настоящее время мой код на XAML моего WPF выглядит следующим образом:
<TabControl x:Name="MainWindowTabControl" HorizontalAlignment="Left" Height="470"
Margin="0,10,0,0" VerticalAlignment="Top" Width="1384">
<TabItem Header="TabItem">
<Grid Background="#FFE5E5E5" Margin="0,-21,0,0">
<CheckBox Name="testBox" Content="Check Box"
HorizontalAlignment="Left" VerticalAlignment="Top" Margin="1293,50,0,0"/>
</Grid>
</TabItem>
</TabControl>
Итак, я понимаю, что я должен работать от ребенка к ребенку, а это означает, использовать VisualTreeHelper, чтобы получить ребенок контрольной Tab (выберите вкладку Item), затем получите дочерние элементы TabItem (выберите сетку), затем получите дочерние элементы Grid, а затем я могу, наконец, пропустить дочерние элементы (флажки), чтобы получить нужную мне информацию. Если я ошибаюсь, может кто-нибудь объяснить, в чем я ошибаюсь?
EDIT: Изменен Checkbox XAML для правильного кода
DataBind эти флажки в виде ViewModel массив булевых значений. Затем перебираем эту коллекцию. Это способ WPF (aka MVVM) сделать это. – code4life
@ code4life Все еще относительно нова для C#, в чем причина или цель этой методологии? – Rinktacular
Сделайте себе серьезную услугу и изучите образец MVVM. Это другой способ мышления о программировании, чем вы привыкли, но это значительно упростит разработку WPF. Если вы не используете его, вы в конечном итоге будете сражаться с WPF почти на каждом шагу. –