【问题标题】:Access wpf control from DataGrid DataTemplate从 DataGrid DataTemplate 访问 wpf 控件
【发布时间】:2016-03-21 12:14:38
【问题描述】:

我有一个 WPF DataGrid 控件,其中还有一个 DataTemplate (CheckBox) 控件,如下所示

                                            <DataGridTemplateColumn Width="50" MinWidth="20"  >
                                                <DataGridTemplateColumn.HeaderTemplate>
                                                    <DataTemplate>
                                                        <!--<TextBlock Text="Manage" FontSize="18" Foreground="#FF666666" HorizontalAlignment="Center" Margin="50,0" />-->
                                                        <StackPanel  HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0,0,0" >
                                                            <CheckBox x:Name="chkBox_CheckAllStuRow" Width="20" Height="auto" Checked="chkBox_CheckAllStuRow_Checked" />
                                                        </StackPanel>
                                                    </DataTemplate>
                                                </DataGridTemplateColumn.HeaderTemplate>
                                                <DataGridTemplateColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
                                                            <CheckBox x:Name="chkBox_CheckStuRow" Width="20" Height="20"  />
                                                        </StackPanel>
                                                    </DataTemplate>
                                                </DataGridTemplateColumn.CellTemplate>
                                            </DataGridTemplateColumn>


                                            <DataGridTextColumn Header="First Name" Width="*" MinWidth="100" Binding="{Binding f_name}" />
                                            <DataGridTextColumn Header="Last Name" Width="*" MinWidth="100" Binding="{Binding l_name}"  />
                                            <DataGridTextColumn  Header="Phone No" Width="*" MinWidth="100" Binding="{Binding phone}"   />

                                            <DataGridTemplateColumn Width="auto" MinWidth="250" >
                                                <DataGridTemplateColumn.HeaderTemplate>
                                                    <DataTemplate>
                                                        <TextBlock Text="Manage" FontSize="18" Foreground="#FF666666" HorizontalAlignment="Center" Margin="50,0" />
                                                    </DataTemplate>
                                                </DataGridTemplateColumn.HeaderTemplate>
                                                <DataGridTemplateColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >
                                                            <Button x:Name="btn_ViewStu"  Content="View" FontSize="14" HorizontalAlignment="Center" Height="27" Margin="3" Style="{DynamicResource ActiveButtonStyle}" Width="65" Click="btn_ViewStu_Click"  />
                                                            <Button x:Name="btn_DeleteStu" Content="Delete" FontSize="14" HorizontalAlignment="Center" Height="27" Margin="3" Style="{DynamicResource DangerButtonStyle}" Width="65" Click="btn_DeleteStu_Click"  />
                                                            <Button x:Name="btn_withDrwStu" Content="Withdraw" FontSize="14" HorizontalAlignment="Center" Height="27" Margin="3" Style="{DynamicResource DangerButtonStyle}" Width="70" />
                                                        </StackPanel>
                                                    </DataTemplate>
                                                </DataGridTemplateColumn.CellTemplate>
                                            </DataGridTemplateColumn>

                                        </DataGrid.Columns>
                                    </DataGrid>

我现在想要实现的是从我的 C# 代码中访问复选框控件的变量名称。提前致谢。

【问题讨论】:

  • 你能指定为什么你需要复选框的名称吗?这听起来对 WPF 来说是一种不好的做法。
  • DataGrid 中每一行的某一列下都填有一个CheckBox,列标题也有一个CheckBox。我想要的只是当列标题 CheckBox 被选中时,CheckBox Column 下的 Rows 中的所有 CheckBox 也将被选中。谢谢。

标签: c# wpf xaml datagrid


【解决方案1】:

你可以试试这个

List<string> chBoxName = new List<string>();
foreach (CheckBox tb in FindVisualChildren<CheckBox>(Window))
{
    chBoxName.Add(tb.Name);
}

chBoxName 属性包含List&lt;string&gt; 类型的所有复选框名称。

辅助方法是

public static IEnumerable<T> FindVisualChildren<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 FindVisualChildren<T>(child))
            {
                yield return childOfChild;
            }
        }
    }
}

【讨论】:

  • 我试过了,但它在 foreach 语句中从这里(窗口)给出了一个错误。请帮忙,我还能做什么。
猜你喜欢
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多