none
在ListView的列标题中的Checkbox,程序中怎么设置去选中状态? RRS feed

  • 问题

  • 我在一个ListView的列标题中放了一个CheckBox:

                <GridViewColumn Header="" Width="40">
                    <GridViewColumn.HeaderTemplate>
                        <DataTemplate>
                            <CheckBox HorizontalAlignment="Center" Click="SelectAllClick" Style="{StaticResource MyCheckBoxSmall2}"></CheckBox>
                        </DataTemplate>
                    </GridViewColumn.HeaderTemplate>
                </GridViewColumn>

    然后我发现程序里面无法访问这个Checkbox,我即使给他设置一个Name属性也无法在代码中访问它。

    我现在需要在代码中设置它的IsChecked属性。


    da jia hao!

    2019年10月29日 7:38

答案

  • Hi,

    试着设置 IsChecked=true

    代码:

      private void Button_Click(object sender, RoutedEventArgs e)
            {
                CheckBox chb = GetVisualChild<CheckBox>(lv1, v => v.Name == "cb1");
                if (null != chb)
                {
                    chb.IsChecked = true;
                }
               
    
            }
            public T GetVisualChild<T>(DependencyObject parent, Func<T, bool> predicate) where T : Visual
            {
                int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < numVisuals; i++)
                {
                    DependencyObject v = (DependencyObject)VisualTreeHelper.GetChild(parent, i);
                    T child = v as T;
                    if (child == null)
                    {
                        child = GetVisualChild<T>(v, predicate);
                        if (child != null)
                        {
                            return child;
                        }
                    }
                    else
                    {
                        if (predicate(child))
                        {
                            return child;
                        }
                    }
                }
    
                return null;
            }

    Best Regards,

    Alex


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。





    2019年10月29日 8:47
    版主

全部回复

  • Hi,

    试着设置 IsChecked=true

    代码:

      private void Button_Click(object sender, RoutedEventArgs e)
            {
                CheckBox chb = GetVisualChild<CheckBox>(lv1, v => v.Name == "cb1");
                if (null != chb)
                {
                    chb.IsChecked = true;
                }
               
    
            }
            public T GetVisualChild<T>(DependencyObject parent, Func<T, bool> predicate) where T : Visual
            {
                int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < numVisuals; i++)
                {
                    DependencyObject v = (DependencyObject)VisualTreeHelper.GetChild(parent, i);
                    T child = v as T;
                    if (child == null)
                    {
                        child = GetVisualChild<T>(v, predicate);
                        if (child != null)
                        {
                            return child;
                        }
                    }
                    else
                    {
                        if (predicate(child))
                        {
                            return child;
                        }
                    }
                }
    
                return null;
            }

    Best Regards,

    Alex


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。





    2019年10月29日 8:47
    版主
  • 最简单的就是使用loaded方法。

    创建loaded方法,方法使用私有字段获得checkbox,并设置IsChecked属性

    2019年10月29日 11:01