【问题标题】:HowTo set IsChecked Property false of all ToggleButtons in a StackPanel如何将 StackPanel 中所有切换按钮的 IsChecked 属性设置为 false
【发布时间】:2017-04-06 22:37:01
【问题描述】:

如何在 StackPanel 中列出所有现有的 ToggleButtons 并在代码隐藏中将其 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>

我从数据库中读取 false 或 true。但如果我点击“添加”,我希望所有的 ToggleButtons 都是IsChecked="false"

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    而不是将其添加到列表中,而只是创建一个 linq 命令 其中

    为你创建列表并为你迭代它

    YourStackPanel.Children
                  .OfType<ToggleButton>().ToList()
                                         .ForEach(toggleButton => toggleButton.IsChecked = false);
    

    【讨论】:

    • 我认为这个答案比我自己的要好,因为它让 Linq 处理迭代和类型检查。
    • 它对我不起作用(上面编辑了 XAML 代码)。在 ToggleButton 有 GroupBox 等之前它会出错吗?我认为 ToggleButtons 仍然是堆栈面板的子项。
    • @OJean,请参阅之前的评论。可能是为了标记你而不是我。
    • @BernardWalters 我没有收到任何错误。如果我单击我的按钮,它只是不会将 ToggleButtons IsChecked 属性更改为 false。
    • @OJean 你最初要求的和你现在要求的不同,你将不得不遍历堆栈面板的所有后代并识别所有切换按钮
    【解决方案2】:

    试试这个。

    for (int i = 0; i < togglebtnListSp.Children.Count; i++)
         if (_panel.Children[i] is ToggleButton)
                  ((ToggleButton)_panel.Children[i]).IsChecked = false;
    

    这里发生的事情是代码检查每个孩子是否是一个 ToggleButton。如果是这样,请将集合中的 UIElement 对象转换为 ToggleButton 并将 IsChecked 设置为 false。

    【讨论】:

      【解决方案3】:

      在代码隐藏中,您可以使用一种方法按类型查找所有元素

      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
      

      【讨论】:

        猜你喜欢
        • 2014-12-27
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 1970-01-01
        • 1970-01-01
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多