У меня есть сетка данных, которая AutoScrolls основана на воспроизведении видео (субтитры), которая отлично работает, но я хочу плавную прокрутку (анимация). Я попробовал AniScrollViewer здесь , но он не работает.Никаких исключений или ничего только прокрутка.Что я делаю неправильно??Обратите внимание, что при печати x и y на консоли были правильно изменены значения y.
<local:AniScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Disabled" x:Name="mainViewer"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<DataGrid IsReadOnly="True" AutoGenerateColumns="false"
ItemsSource="{Binding}" CanUserSortColumns="False"
CanUserResizeColumns="false" CanUserAddRows="False"
x:Name="datagrid" HorizontalAlignment="Left" Height="243"
Margin="0,41,0,0" VerticalAlignment="Top"
EnableRowVirtualization="false"
Width="679"
VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionMode="Single"
PreviewMouseRightButtonUp="DataGrid_Right_Click" >
<DataGrid.Columns>
<DataGridTextColumn Header="Character" Width="SizeToCells" Binding="{Binding Character}"/>
<DataGridTextColumn Header="Timecode In" Width="SizeToCells" Binding="{Binding TimecodeIn, Converter={StaticResource timecodeConverter}}" />
<DataGridTextColumn Header="Timecode Out" Width="SizeToCells" Binding="{Binding TimecodeOut, Converter={StaticResource timecodeConverter}}" />
<DataGridTemplateColumn Header="Dialogue" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type conv:mGridEntry}">
<TextBlock Text="{Binding Text}" TextWrapping="Wrap"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontFamily" Value="Arial" />
<Setter Property="FontSize" Value="12"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Padding" Value="6"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter VerticalAlignment="Center" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="LightBlue"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{Binding Character, Converter={StaticResource namebrushConverter}}"/>
</Style>
</DataGrid.RowStyle>
</DataGrid>
</local:AniScrollViewer>
И код:
DataGridRow row = Grid.ItemContainerGenerator.ContainerFromIndex(scrollindex) as DataGridRow;
Point relativePoint = row.TransformToAncestor(Grid).Transform(new Point(0, 0));
ScrollToPosition(relativePoint.X, relativePoint.Y);
private static void ScrollToPosition(double x, double y)
{
DoubleAnimation vertAnim = new DoubleAnimation();
vertAnim.From = mScrollViewer.VerticalOffset;
vertAnim.To = y;
vertAnim.DecelerationRatio = .2;
vertAnim.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
Storyboard sb = new Storyboard();
sb.Children.Add(vertAnim);
Storyboard.SetTarget(vertAnim, mScrollViewer);
Storyboard.SetTargetProperty(vertAnim, new PropertyPath(AniScrollViewer.CurrentVerticalOffsetProperty));
sb.Begin();
}