2010-09-30 71 views
9

我有wpfTolkit數據網格。他有DataGrid.RowDetailsTemplate我需要點擊按鈕時它會展開/摺疊。我需要展開/摺疊RowDetailsTemplate

如何做到這一點,我無法找到的情況下,你想

<Custom:DataGrid RowDetailsVisibilityMode="VisibleWhenSelected" SelectionMode="Extended" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False"> 
    <Custom:DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <Custom:DataGrid> 
       <Custom:DataGrid.Columns> 
        <Custom:DataGridTextColumn Binding="{Binding idClient, Mode=Default}" Header="Ид" IsReadOnly="True"/> 
        <Custom:DataGridTextColumn Binding="{Binding name_client, Mode=Default}" Header="Имя" IsReadOnly="True"/> 
       </Custom:DataGrid.Columns> 
      </Custom:DataGrid> 
     </DataTemplate> 
    </Custom:DataGrid.RowDetailsTemplate> 
    <Custom:DataGrid.Columns> 
     <Custom:DataGridTemplateColumn> 
      <Custom:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Expander IsExpanded="True"/> 
       </DataTemplate> 
      </Custom:DataGridTemplateColumn.CellTemplate> 
     </Custom:DataGridTemplateColumn> 
     <Custom:DataGridTextColumn Binding="{Binding idPartner, Mode=Default}" Header="Ид" IsReadOnly="True"/> 
     <Custom:DataGridTextColumn Binding="{Binding name_partner, Mode=Default}" Header="Имя" IsReadOnly="True"/> 
    </Custom:DataGrid.Columns> 
</Custom:DataGrid> 

回答

0

選擇對電網行應擴大使用RowDetailsTemplate顯示內容的行。這使得行選中的行,並設置DataGrid的SelectedIndex屬性的值。

摺疊行將DataGrid的SelectedIndex屬性設置爲-1。

2

包括摺疊和展開活動如下

<Custom:DataGridTemplateColumn> 
    <Custom:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Expander Collapsed="exp_Collapsed" Expanded="exp_Expanded"/> 
      </DataTemplate> 
     </Custom:DataGridTemplateColumn.CellTemplate> 
    </Custom:DataGridTemplateColumn> 

在後面的代碼

private void exp_Collapsed(object sender, RoutedEventArgs e) 
     { 
      this.dataGrid1.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed; 
     } 

     private void exp_Expanded(object sender, RoutedEventArgs e) 
     { 
      this.dataGrid1.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected; 
     } 
13

入住此...

Adding a Button to a WPF DataGrid

OR

XAML:

<DataGrid Name="dg1" AutoGenerateColumns="False" SelectionMode="Single" CanUserAddRows="false" CanUserDeleteRows="False" SelectionUnit="FullRow" > 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="BorderThickness" Value="0"/> 
     </Style> 
    </DataGrid.CellStyle> 

    <DataGrid.RowHeaderTemplate> 
     <DataTemplate> 
      <Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"> 

      </Expander> 
     </DataTemplate> 
    </DataGrid.RowHeaderTemplate> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" IsReadOnly="True" Width="100" Binding="{Binding Name}" /> 
     <DataGridTextColumn Header="Title" IsReadOnly="True" Width="100" Binding="{Binding Title}" /> 
     <DataGridTextColumn Header="Job" IsReadOnly="True" Width="100" Binding="{Binding Job}" /> 
    </DataGrid.Columns> 

    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Isi, Converter={StaticResource ResourceKey=isiTextConverter}}" Margin="10,5,0,0" /> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 

MainWindow.xaml.cs

private void Expander_Expanded(object sender, RoutedEventArgs e) 
{ 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
    if (vis is DataGridRow) 
    { 
     var row = (DataGridRow)vis; 
     row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
     break; 
    } 
} 

private void Expander_Collapsed(object sender, RoutedEventArgs e) 
{ 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
     if (vis is DataGridRow) 
     { 
      var row = (DataGridRow)vis; 
      row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
      break; 
     } 
} 

輸出

enter image description here

+2

btw,'Expander_Expanded'和'Expander_Collapsed'是相同的。如果有意的話,可以有一個方法來處理'Expanded'和'Collapsed'事件 – ASh 2016-05-10 07:51:29

0

我已經改善了以前的答案:

而不是使用DataGrid.RowHeaderTemplate如下使用DataGridTemplateColumn的:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Expander Expanded="Expander_OnExpanded"  Collapsed="Expander_OnCollapsed"> 
       </Expander> 
      </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Benifit是你需要的不是你的鼠標點擊擴展按鈕後重新定位。