Silverlight DataGrid:使用VisualStateManager隐藏列
不使用codebehind就可以隐藏datagrid的一列吗? 例如,使用Silverlight DataGrid:使用VisualStateManager隐藏列,silverlight,datagrid,show-hide,Silverlight,Datagrid,Show Hide,不使用codebehind就可以隐藏datagrid的一列吗? 例如,使用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;assembl
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>
有什么想法吗?我还没能想出一个简单的解决办法。不过,我至少要告诉你为什么这不起作用,这才公平。要设置属性的动画,属性必须是
dependencProperty
。DataGridColumn
的Visibility
属性不是一个dependencProperty
,因此它没有动画效果。我还没有找到一个简单的解决方案。不过,我至少要告诉你为什么这不起作用,这才公平。要设置属性的动画,属性必须是dependencProperty
。DataGridColumn
的Visibility
属性不是一个dependencProperty
,因此它不会产生动画。您可以尝试设置列宽=0您可以尝试设置列宽=0您可以为DataGrid创建子类或创建附加属性来切换可见性。但是,与不透明度不同,除非在VisualStateManager中启用FluidLayout,否则无法真正“动画化”可见性
有关fluid UI的更多信息,请查看您可以将DataGrid子类化或创建附加属性以切换可见性。但是,与不透明度不同,除非在VisualStateManager中启用FluidLayout,否则无法真正“动画化”可见性
有关fluid UI的更多信息,请查看感谢您的输入,makes sence。我一直在使用的解决方案是,继承DataGrid,实现一个DependencyProperty,它可以控制列的可见性。我稍后会发布这个解决方案。如果你有更好的,请让我知道:-)谢谢你的意见,有意义。我一直在使用的解决方案是,继承DataGrid,实现一个DependencyProperty,它可以控制列的可见性。我稍后会发布这个解决方案。如果您有更好的,请告诉我:-)
VisualStateManager.GoToState(this, "Edit", false);