Wp8:无法在列表框中获取checkBox

时间:2015-02-09 18:50:19

标签: c# windows-phone-8 listbox

我无法在listbox 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编程PLZ帮助的新手。谢谢

2 个答案:

答案 0 :(得分:0)

您是否在询问获取Checked的{​​{1}}属性?

this是你要找的人吗?使用Checkbox

Children内查找Parent控件的示例代码
VisualTreeHelper

答案 1 :(得分:0)

你得到了解决方案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