如何在WPF

时间:2018-03-01 15:50:59

标签: c# silverlight datagrid wpf-controls

在我维护的Silverlight应用程序中,我遇到了一个小障碍。在我的XAML UserControl中,我有一个包含DataGrid的标准Grid。我正在尝试访问我的Datagrid的子项。也许这个公式在我给定的背景下并不是最精确的,我还在学习WPF,所以你不得不原谅我。

这是上下文。在我的Datagrid中,我们已经定义了DataGridTemplateColumn中单元格的外观模板。 如

   <DataGrid>
    <DataGrid.Columns>
        <DatagridTemplateColumn BindingHelper = "Actions"> 
           <DataGridTemplateColumn.CellTemplate>
               <DataTemplate>
                  <StackPanel Orientation = "Horizontal" Visibility="{Binding IsApproved, Converter={StaticResource BoolToVisibilityConverter}>
                     <-- I want to access this button for instance --> 
                     <Button Command="DoingStuffCommand" Name="DoingStuffA" Visibility="{Binding DoingStuffCommandVisible, Converter={StaticResource BoolToVisibilityConverter}}" />
                     <-- There are more than one buttons in this stackpanel -->
           .....
</DataGridTemplateColumn/>

在我的StackPanel中,我有Button实例我想在满足某个条件时呈现“Collapsed”,例如你没有管理员权限来修改页面,所以你只读了 - 唯一的权利。

我为这个问题设计了一个方法,我称之为DisableWriteableRights(),我首先得到我的网格并查找我的孩子之一的datagrid。 在构建页面时,该方法将查看您的配置文件的权限并确定您是否具有管理员访问权限。

没有选择任何细胞。

我在这里快速浏览一下:

  1. WPF Datagrid Get Selected Cell Value
  2. Dynamically Changing Combobox to TextBox in datagrid inside Cell Editing Template in silverlight 4
  3. Programmatically set content in Silverlight DataGrid details
  4. 但这并不能真正让我满意。我没有选择一个单元格,我正在创建我的视图,在创建它时,我正在决定按钮是否应该折叠。即使折叠,列仍将保留在视图中,但它们将为空。

    现在,看一下Datagrid的给定属性,我不知道该怎么做才能获得DataGrid中StackPanel的子代。我可以说我的问题的一部分是我没有从DataGridRow开始。从那里,我可以将GetCellContent的引用提供给DataGridColumn,但这不是我的上下文。我不得不向下移动,而是向下移动,现在我没有看到任何方式这样做。 对我来说唯一有意义的是查看Columns属性并尝试找到我感兴趣的列。我的问题是如何从那里移动到持有Button引用的单元格以及如何有效地“折叠”它们。

    以下是我方法的摘录:

    private void DisableWriteableRights() 
    {
        var grid = Content as Grid; 
        if(grid == null) 
            return; 
    
        var dataGrid = grid.Children.Cast<UIElement>().FirstOrDefault(x => x is DataGrid) as DataGrid;
    
       if(dataGrid == null) 
           return;
    
       var actionColumn = dataGrid.Columns.FirstOrDefault(c => ((string)c.Header).Equals("Action", StringComparison.InvariantCultureIgnoreCase));
    
       //Looking for how to access the buttons in my datagrid...
       //buttons.ForEach(button => button.Visibility = Visibility.Collapsed);
    }
    
    我还想从一个专栏中得到一些东西,有没有办法获取按钮实例而不是使用像FindName这样的东西,因为我发现它会变得乏味,如果名字随着时间的推移而变化,你将会有突破性的变化还有...

0 个答案:

没有答案