是否可以隐藏数据网格的列,而不使用代码隐藏?
例如。使用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);
有什么想法吗?
答案 0 :(得分:1)
我还没有想出一个简单的解决方案。然而,我唯一公平地告诉你为什么这不起作用。为了动画属性,属性需要DependencyProperty
。 Visibility
的{{1}}属性不是DataGridColumn
,因此它不会设置动画。
答案 1 :(得分:0)
您可以尝试设置列宽= 0
答案 2 :(得分:0)
您可以子类化DataGrid或创建附加属性以切换可见性。但是,与Opacity不同,除非在VisualStateManager中启用FluidLayout,否则无法对“可见性”进行“动画处理”。
有关流畅的用户界面的更多信息,请查看http://www.microsoft.com/design/toolbox/tutorials/fluidui/