2010-03-15 46 views
1

是否可以在不使用代碼隱藏的情況下隱藏數據網格的列? 例如通過使用VisualStateManagerSilverlight 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;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); 

任何想法?

回答

1

我還沒有能夠想出一個簡單的解決方案,至今。然而,至少我會告訴你爲什麼這不起作用。爲了動畫屬性,該屬性需要爲DependencyPropertyDataGridColumnVisibility屬性不是DependencyProperty,因此它不生成動畫。

+0

感謝您的輸入,使得SENCE。解決方案一直使用的是將DataGrid實現爲一個DependencyProperty,它可以控制列的可見性。我稍後會發布這個解決方案。如果你有更好的,請讓我知道:-) – 2010-03-17 07:35:31

0

可以嘗試設定欄寬度= 0

0

您可以子類數據網格或創建一個附加屬性來切換能見度。然而,與Opacity不同的是,除非在VisualStateManager中啓用FluidLayout,否則不能真正使'可見性動畫化'。

有關流體UI更多信息,請看看http://www.microsoft.com/design/toolbox/tutorials/fluidui/