Silverlight DataGrid: скрытие столбцов с помощью VisualStateManager - PullRequest
1 голос
/ 15 марта 2010

Можно ли скрыть столбец таблицы данных, не используя codebehind? Например. используя VisualStateManager?

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class="Buttons.MainPage"
Width="640" Height="480">

<StackPanel x:Name="LayoutRoot" Width="624" HorizontalAlignment="Right" Margin="0,0,8,0" >
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="EditStates">
            <VisualState x:Name="ReadOnly" />
            <VisualState x:Name="Edit">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ShownInEditMode" Storyboard.TargetProperty="(UIElement.Visibility)" BeginTime="00:00:00" Duration="00:00:00.0010000">
                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                            <DiscreteObjectKeyFrame.Value>
                                <Visibility>Visible</Visibility>
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <data:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding BBRNumbers}">
        <data:DataGrid.Columns>
            <data:DataGridTextColumn Header="AlwaysShown" Width="80" Binding="{Binding Municipality}" />
            <data:DataGridTextColumn Header="ShownInEditMode" Width="73" Binding="{Binding Estate}" Visibility="Collapsed" />
        </data:DataGrid.Columns>
    </data:DataGrid>
</StackPanel>

После вызова следующего следует скрыть столбец, но это не работает.

VisualStateManager.GoToState(this, "Edit", false);

Есть идеи?

Ответы [ 3 ]

1 голос
/ 17 марта 2010

Мне пока не удалось найти простое решение для этого. Однако справедливо, что я, по крайней мере, скажу вам, почему это не работает. Чтобы анимировать свойство, оно должно быть DependencyProperty. Visibility свойство DataGridColumn не является DependencyProperty, следовательно, оно не анимируется.

0 голосов
/ 22 октября 2011

Вы можете создать подкласс DataGrid или создать вложенное свойство для переключения видимости. Однако, в отличие от Opacity, вы не сможете «оживить» видимость, если не включите FluidLayout в VisualStateManager.

Для получения дополнительной информации о пользовательском интерфейсе жидкости, пожалуйста, посмотрите на http://www.microsoft.com/design/toolbox/tutorials/fluidui/

0 голосов
/ 22 октября 2011

Вы можете попробовать установить ширину столбца = 0

...