2015-05-14 53 views
0

扩展按钮在我的wpf数据网格中无法正常工作。我为扩展器按钮使用了以下模板。扩展按钮在我的wpf数据网格中无法正常工作

  <!-- MouseOver, Pressed behaviours--> 
      <Trigger Property="IsMouseOver" 
          Value="true"> 
       <Setter Property="Stroke" 
           Value="#FF3C7FB1" 
           TargetName="Circle"/> 
       <Setter Property="Stroke" 
           Value="#222" 
           TargetName="Sign"/> 
      </Trigger> 
      <Trigger Property="IsPressed" 
          Value="true"> 
       <Setter Property="Stroke" 
           Value="#FF526C7B" 
           TargetName="Circle"/> 
       <Setter Property="StrokeThickness" 
           Value="1.5" 
           TargetName="Circle"/> 
       <Setter Property="Stroke" 
           Value="#FF003366" 
           TargetName="Sign"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
    <!-- Simple Expander Template--> 
    <ControlTemplate x:Key="SimpleExpanderTemp" TargetType="{x:Type Expander}"> 
     <DockPanel> 
      <ToggleButton x:Name="ExpanderButton" 
          DockPanel.Dock="Top" 
          Template="{StaticResource SimpleExpanderButtonTemp}" 
          Content="{TemplateBinding Header}" 
          IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" 
          OverridesDefaultStyle="True" 
          Padding="1.5,0"> 
      </ToggleButton> 
      <ContentPresenter x:Name="ExpanderContent" 
           Grid.Row="1" 
           Visibility="Collapsed" 
           DockPanel.Dock="Bottom"/> 
     </DockPanel> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsExpanded" Value="True"> 
       <Setter TargetName="ExpanderContent" Property="Visibility" Value="Visible"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

另外我为datagridtemplatecolumn添加下面的代码。

<DataGridTemplateColumn Width="27"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <Expander Template="{StaticResource SimpleExpanderTemp}" Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"/> 
         </StackPanel> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

但是,如果我试图在我的WPF数据网格扩展一个扩展按钮,其他的一些扩展的按钮也在不断扩大(不是每次)以及一些扩展的按钮正在崩溃。

这个xaml代码有什么错误?

的扩展事件,

private void Expander_Expanded(object sender, RoutedEventArgs e) 
{ 
    ContentControl cc = sender as ContentControl; 
    Expander exp = cc as Expander; 

    var itemsSource = objDatagrid.ItemsSource as IEnumerable; 
    if (itemsSource != null) 
    { 
     foreach (var item in itemsSource) 
     { 
      var row = objDatagrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; 
      if (row != null) 
      { 
       row.IsSelected = false; 
      } 

     } 
    } 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
     if (vis is DataGridRow) 
     { 

      var row = (DataGridRow)vis; 
      row.IsSelected = true; 
      if (exp.IsExpanded) 
      { 
       row.DetailsVisibility = Visibility.Visible; 
       exp.ExpandDirection = ExpandDirection.Down; 
      } 
      break; 
     } 
} 

private void Expander_Collapsed(object sender, RoutedEventArgs e) 
{ 
    var itemsSource = objDatagrid.ItemsSource as IEnumerable; 
    if (itemsSource != null) 
    { 
     foreach (var item in itemsSource) 
     { 
      var row = objDatagrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; 
      if (row != null) 
      { 
       row.IsSelected = false; 
      } 

     } 
    } 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 

     if (vis is DataGridRow) 
     { 
      var row = (DataGridRow)vis; 
      row.IsSelected = true; 
      row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
      break; 
     } 

} 
+0

什么是扩展事件处理程序? – icebat

+0

@icebat:扩展事件包含在我更新的问题中 –

回答

0

你可以尝试RowDetailsTemplate为DataGrid。同时设置RowDetailsVisibilityMode =“VisibleWhenSelected”

 <DataGrid SelectionMode="Extended" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected"> 
     <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" Margin="5"> 
         <!-- Content --> 
       </StackPanel> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 
     <DataGrid.Columns> 
      <!-- Columns --> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid>