【问题标题】:Silverlight DataGrid: Hiding columns using VisualStateManagerSilverlight DataGrid:使用 VisualStateManager 隐藏列
【发布时间】:2010-03-15 14:07:26
【问题描述】:

是否可以在不使用代码隐藏的情况下隐藏数据网格的列? 例如。通过使用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);

有什么想法吗?

【问题讨论】:

    标签: silverlight datagrid show-hide


    【解决方案1】:

    我还没有想出一个简单的解决方案来解决这个问题。然而,我至少告诉你为什么这不起作用是唯一公平的。为了对属性进行动画处理,该属性需要为DependencyPropertyDataGridColumnVisibility 属性不是 DependencyProperty,因此它没有动画。

    【讨论】:

    • 感谢您的输入,有意义。我一直在使用的解决方案是继承 DataGrid 并实现一个可以控制列的可见性的 DependencyProperty。稍后我会绕过发布此解决方案。如果你有更好的,请告诉我:-)
    【解决方案2】:

    您可以尝试设置列宽 = 0

    【讨论】:

      【解决方案3】:

      您可以继承 DataGrid 或创建附加属性来切换可见性。但是,与 Opacity 不同的是,除非您在 VisualStateManager 中启用 FluidLayout,否则您无法真正“动画化”可见性。

      有关流畅 UI 的更多信息,请查看http://www.microsoft.com/design/toolbox/tutorials/fluidui/

      【讨论】:

        猜你喜欢
        • 2011-12-24
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 2017-07-31
        相关资源
        最近更新 更多