【问题标题】:Wp8:Not able to get checkBox in listboxWp8:无法在列表框中获取复选框
【发布时间】:2015-02-09 18:50:18
【问题描述】:

我无法在列表框 xaml 中找到复选框:

<ListBox x:Name="my_list" Grid.Row="0">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" >
                        <CheckBox x:Name="cbx_state"  Tag="{Binding}"/>
                        <TextBlock x:Name="txt_string" Text="{Binding}" VerticalAlignment="Center" FontSize="34" />
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
 </ListBox>

我正在尝试获取 cbk_state 以便我可以设置其选中的属性。我用来获取复选框的函数是

private void GetItemsRecursive(DependencyObject lb)
  {
      var childrenCount = VisualTreeHelper.GetChildrenCount(lb);

      for (int i = 0; i < childrenCount; i++)
      {
          var child = VisualTreeHelper.GetChild(lb, i);


          if (child is ListBoxItem)
          {
              MessageBox.Show(child.GetType().ToString());
              return;
          }

          GetItemsRecursive(child);
      }
  }

问题是我每次都将 ChildrenCount 设为零。 我已经经历了几种方法,但没有这样的使用。也尝试过 this 但在这里我没有得到 ListBox 的 ItemContainerGenerator。

我是 wp8 编程新手,请帮助。谢谢

【问题讨论】:

    标签: c# windows-phone-8 listbox


    【解决方案1】:

    您是在询问获取CheckboxChecked 属性吗?

    this 是您要找的吗?使用VisualTreeHelperParent 中查找Children 控件的示例代码:

     private ChildControl FindVisualChild<ChildControl>(DependencyObject DependencyObj)
        where ChildControl : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(DependencyObj); i++)
            {
                DependencyObject Child = VisualTreeHelper.GetChild(DependencyObj, i);
    
                if (Child != null && Child is ChildControl)
                {
                    return (ChildControl)Child;
                }
                else
                {
                    ChildControl ChildOfChild = FindVisualChild<ChildControl>(Child);
    
                    if (ChildOfChild != null)
                    {
                        return ChildOfChild;
                    }
                }
            }
            return null;
        }
    

    【讨论】:

    • 在这里也试过了,我得到了 .ItemContainerGenerator。为空
    【解决方案2】:

    您好,得到了解决方案here。无需简单地设置虚拟化属性。

    private void GetItemsRecursive(DependencyObject lb)
    {
        var childrenCount = VisualTreeHelper.GetChildrenCount(lb);
    
        for (int i = 0; i < childrenCount; i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(lb, i);
    
            if (child is CheckBox) // specific/child control 
            {
                CheckBox targeted_element = (CheckBox)child;
    
                targeted_element.IsChecked = true;
    
                if (targeted_element.IsChecked == true)
                {
    
                    return;
                }
            }
    
            GetItemsRecursive(child);
        }
    }
    

    在 DependencyObject child = VisualTreeHelper.GetChild(lb, i); 处稍作改动而不是 var child

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      相关资源
      最近更新 更多