如何在 StackPanel 中列出所有现有的 ToggleButton 并将其IsChecked
属性设置为在代码隐藏中false
?
我从:
List<ToggleButton> togglebuttons = togglebtnListSp.Children.OfType<ToggleButton>().ToList();
foreach(var item in togglebuttons)
{
item.IsChecked = false;
}
但现在我卡住了,不知道如何确认。
这是我的 XAML:
<!-- Private Customer Rights -->
<StackPanel x:Name="togglebtnListSp">
<GroupBox x:Name="customerRightsGroupBox" Header="Customer Rights" Margin="10,10,10.2,0" VerticalAlignment="Top" Height="108">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,5,0">
<DockPanel LastChildFill="False">
<Label Content="Can Add:" DockPanel.Dock="Left" />
<ToggleButton x:Name="can_add_customer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
<DockPanel LastChildFill="False">
<Label Content="Can Create Assignment:" DockPanel.Dock="Left" />
<ToggleButton x:Name="can_add_assignment_customer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
</StackPanel>
<StackPanel Grid.Column="1" Margin="5,0,0,0">
<DockPanel LastChildFill="False">
<Label Content="Can Delete:" DockPanel.Dock="Left" />
<ToggleButton x:Name="can_delete_customer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
<DockPanel LastChildFill="False">
<Label Content="Can Edit:" DockPanel.Dock="Left" />
<ToggleButton x:Name="can_edit_customer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
</StackPanel>
</Grid>
</GroupBox>
<!-- Firm Customer Rights -->
<GroupBox x:Name="firmCustomerRightsGroupBox" Header="Firmcustomer rights" Margin="10,10,10,0" VerticalAlignment="Top" Height="108">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,5,0">
<DockPanel LastChildFill="False">
<Label Content="Can Add:" DockPanel.Dock="Left" />
<ToggleButton x:Name="can_add_firmcustomer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
<DockPanel LastChildFill="False">
<Label Content="Can create Assignment for firmcustomer" DockPanel.Dock="Left" FontSize="12" />
<ToggleButton x:Name="can_add_assignment_firmcustomer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
</StackPanel>
<StackPanel Grid.Column="1" Margin="5,0,0,0">
<DockPanel LastChildFill="False">
<Label Content="Can Delete:" DockPanel.Dock="Left" />
<ToggleButton x:Name="can_delete_firmcustomer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
<DockPanel LastChildFill="False">
<Label Content="Can edit:" DockPanel.Dock="Left" />
<ToggleButton x:Name="can_edit_firmcustomer" DockPanel.Dock="Right"></ToggleButton>
</DockPanel>
</StackPanel>
</Grid>
</GroupBox>
</StackPanel>
我从数据库中读取假或真。但是,如果我单击"添加",我希望所有切换按钮都IsChecked="false"
而不是将其添加到列表中,而只是创建一个 linq 命令哪
为您创建列表并为您迭代
YourStackPanel.Children
.OfType<ToggleButton>().ToList()
.ForEach(toggleButton => toggleButton.IsChecked = false);
试试这个。
for (int i = 0; i < togglebtnListSp.Children.Count; i++)
if (_panel.Children[i] is ToggleButton)
((ToggleButton)_panel.Children[i]).IsChecked = false;
这里发生的事情是代码检查每个孩子,看看它是否是一个切换按钮。如果是这样,请将集合中的 UIElement 对象强制转换为切换按钮,并将IsChecked
设置为 false。
在代码隐藏中,您可以使用按类型查找所有元素的方法
public static IEnumerable<T> SeachUiElementsByTypo<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in SeachUiElementsByTypo<T>(child))
{
yield return childOfChild;
}
}
}
}
像这样使用:
var toggleButtons= UiServices.SeachUiElementsByTypo<ToggleButton>(YourWindow);
foreach (var tb in toggleButtons)
((ToggleButton)tb).IsChecked = false