2010-03-15 6 views
1

Est-il possible de masquer une colonne d'une grille de données sans utiliser codebehind? E.g. en utilisant le VisualStateManager?Silverlight DataGrid: masquage de colonnes à l'aide de 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> 

Appeler les éléments suivants doivent alors cacher la colonne, mais ce travail ne marche pas.

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

Des idées?

Répondre

1

Je n'ai pas encore trouvé de solution simple à ce problème. Cependant, c'est juste juste que je vous dis au moins pourquoi cela ne fonctionne pas. Afin d'animer une propriété, la propriété doit être DependencyProperty. La propriété Visibility du DataGridColumn n'est pas un DependencyProperty, par conséquent, il n'anime pas.

+0

Merci pour l'entrée, fait sence. La solution avec laquelle nous travaillons est d'hériter du DataGrid et d'implémenter un DependencyProperty qui peut contrôler la visibilité des colonnes. Je n'arrive pas à poster cette solution plus tard. Si vous en avez un meilleur, s'il vous plaît faites le moi savoir :-) –

0

Vous pouvez essayer de définir la largeur de colonne = 0

0

Vous pouvez DataGrid sous-classe ou créer une propriété attachée pour basculer la visibilité. Cependant, contrairement à Opacity, vous ne pouvez pas réellement 'animer' Visibility à moins d'activer FluidLayout dans le VisualStateManager.

Pour plus d'information concernant l'interface utilisateur fluide, s'il vous plaît jeter un oeil à http://www.microsoft.com/design/toolbox/tutorials/fluidui/