можно анимировать свертывание столбца DataGrid в Silverlight / WPF? - PullRequest
1 голос
/ 24 октября 2011

У меня есть простой DataGrid в Silverlight с такими шаблонами столбцов:

<data:DataGrid AutoGenerateColumns="False" ...>

    <data:DataGridTextColumn x:Name="idCol" Header="Id" Binding="{Binding Id}" />

    <data:DataGridTextColumn x:Name="nameCol" Header="Name" Binding="{Binding Name}" />

    <data:DataGridTextColumn x:Name="descriptionCol" Header="Description" Binding="{Binding Description}" />

</data:DataGrid

и я хочу свернуть и развернуть некоторые столбцы анимированным способом. Это возможно? Поскольку я не могу использовать VSM на шаблонах ширины столбца, а ширина столбца не является DP, это DataGridLength.

private void ExpandColumns()
{
    // not animated expanding
    //myDataGrid.Columns[0].Visibility = Visibility.Visible;
    //myDataGrid.Columns[2].Visibility = Visibility.Visible;.

}

private void CollapseColumns()
{
    // not animated collapsing
    //myDataGrid.Columns[0].Visibility = Visibility.Collapsed;
    //myDataGrid.Columns[2].Visibility = Visibility.Collapsed;

}

1 Ответ

2 голосов
/ 25 октября 2011

Может быть немного взломать, но как насчет анимации MinWidth и MaxWidth на столбце? В основном установите их в соответствии с тем, что вы хотите сделать, и анимируйте MinWidth для более высокого значения для расширения, а для анимации MaxWidth - для более низкого значения для свертывания.

Вот полный xaml для анимации на MinWidth (я все еще считаю, что это несколько хакерски):

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SolveProblems.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
    <Storyboard x:Key="OnClick1">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(DataGridColumn.MinWidth)" Storyboard.TargetName="dataGridCheckBoxColumn">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="80"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(DataGridColumn.MinWidth)" Storyboard.TargetName="dataGridCheckBoxColumn1">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="90"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
<Window.Triggers>
    <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="button">
        <BeginStoryboard Storyboard="{StaticResource OnClick1}"/>
    </EventTrigger>
</Window.Triggers>
<Grid x:Name="LayoutRoot">
    <DataGrid x:Name="dataGrid" Margin="100,54,129.5,82.5">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn x:Name="dataGridCheckBoxColumn" Width="{Binding Columns[0].MinWidth, ElementName=dataGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            <DataGridCheckBoxColumn x:Name="dataGridCheckBoxColumn1" Width="{Binding Columns[1].MinWidth, ElementName=dataGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        </DataGrid.Columns>
    </DataGrid>
    <Button x:Name="button" Content="Button" HorizontalAlignment="Right" Margin="0,115,22,0" VerticalAlignment="Top" Width="75"/>

    </Grid>

...