2014-09-26 67 views
1

我已經修改了擴展器的樣式,以便能夠在DataGrid的組頭中擴展內容。樣式基於MSDN example模板。它工作正常,但當我用鼠標滾輪滾動程序凍結。使用滾動條滾動工作正常!任何人都可以看到什麼是錯的?WPF - 使用鼠標滾輪滾動使用自定義擴展器凍結DataGrid

<ControlTemplate x:Key="ExpanderToggleButton" 
      TargetType="{x:Type ToggleButton}"> 
    <Border x:Name="Border" 
     CornerRadius="0" 
     BorderThickness="0"> 
     <VisualStateManager.VisualStateGroups> 

      <VisualStateGroup x:Name="CheckStates"> 
       <VisualState x:Name="Checked"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
             Storyboard.TargetName="CollapsedArrow"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
            Value="{x:Static Visibility.Hidden}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
             Storyboard.TargetName="ExpandededArrow"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
            Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Unchecked" /> 
       <VisualState x:Name="Indeterminate" /> 
      </VisualStateGroup> 
     </VisualStateManager.VisualStateGroups> 
     <Grid> 
      <Path x:Name="CollapsedArrow" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Data="M 0 0 L 4 4 L 8 0 Z"> 
       <Path.Fill> 
        <SolidColorBrush Color="{StaticResource ForegroundColor}" /> 
       </Path.Fill> 
      </Path> 
      <Path x:Name="ExpandededArrow" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Visibility="Collapsed" 
     Data="M 0 4 L 4 0 L 8 4 Z"> 
       <Path.Fill> 
        <SolidColorBrush Color="{StaticResource ForegroundColor}" /> 
       </Path.Fill> 
      </Path> 
     </Grid> 
    </Border> 
</ControlTemplate> 

<Style TargetType="{x:Type Expander}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Expander}"> 
       <StackPanel> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal" /> 
          <VisualState x:Name="MouseOver" /> 
          <VisualState x:Name="Disabled" /> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 

        <Border x:Name="Border" Grid.Row="0" BorderThickness="0" CornerRadius="0"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="20" /> 
           <ColumnDefinition Width="*" /> 
          </Grid.ColumnDefinitions> 
          <ToggleButton OverridesDefaultStyle="True" Template="{StaticResource ExpanderToggleButton}" 
             IsChecked="{Binding IsExpanded, Mode=TwoWay, 
             RelativeSource={RelativeSource TemplatedParent}}"> 

          </ToggleButton> 
          <ContentPresenter Grid.Column="1" ContentSource="Header" RecognizesAccessKey="True" /> 
         </Grid> 
        </Border> 
        <Border x:Name="Content" 
          BorderThickness="0" 
          CornerRadius="0" Visibility="Collapsed"> 

         <ContentPresenter /> 
        </Border> 
       </StackPanel> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsExpanded" Value="True"> 
         <Setter TargetName="Content" Property="Visibility" Value="Visible" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

在我使用數據網格與VirtualizingPanel.IsVirtualizingWhenGrouping = 「真」 性能的XAML。

<DataGrid Margin="10, 5, 10, 10" 
    VirtualizingPanel.IsVirtualizingWhenGrouping="True" > 
<DataGrid.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
      <DataTemplate> 
       <Grid> 
        <Label HorizontalAlignment="Left">Label to the left</Label> 
        <Button HorizontalAlignment="Right">Button to the right</Button> 
       </Grid> 
      </DataTemplate> 
     </GroupStyle.HeaderTemplate> 
     <GroupStyle.Panel> 
      <ItemsPanelTemplate> 
       <DataGridRowsPresenter/> 
      </ItemsPanelTemplate> 
     </GroupStyle.Panel> 
     <GroupStyle.ContainerStyle> 
      <Style TargetType="{x:Type GroupItem}"> 
       <Setter Property="Margin" Value="0,0,0,15"/> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type GroupItem}"> 
          <Expander Background="Transparent" IsExpanded="True" HorizontalAlignment="Stretch" BorderThickness="0" > 
           <Expander.Header> 
            <ContentPresenter HorizontalAlignment="Stretch" /> 
           </Expander.Header> 
           <Expander.Content> 
            <ItemsPresenter /> 
           </Expander.Content> 
          </Expander> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </GroupStyle.ContainerStyle> 
    </GroupStyle> 
</DataGrid.GroupStyle> 
</DataGrid> 

回答

1

晚來回答這個問題,但與使用IsVirtualizingWhenGrouping一個列表框尋找一個答案,一個類似的問題,當我遇到這個問題跑了。這是我的解決方案。

我的問題是,GroupStyle.ContainerStyle有餘量,改變垂直尺寸:

<GroupStyle.ContainerStyle> 
    <Style TargetType="GroupItem"> 
    <Setter Property="Margin" Value="0,10,0,0" /> 
    </Style> 
</GroupStyle.ContainerStyle> 

對於我來說,我只是刪除了所有ContainerStyle一起,搬到保證金的HeaderTemplate中。

我發現問題中的XAML在GroupItem的樣式上也有一個邊距,可以改變它的高度。也許這是罪魁禍首?

希望這有助於下一個人。

相關問題