我在網格中有2列。當我點擊一個按鈕時,我希望第一列從當前位置左側動畫到0。因此,實際上,它會崩潰,而我只剩下查看單個列。在WPF中,有沒有人動畫Grid?
回答
退房this視頻培訓環節,從託德米蘭達將告訴您如何動畫網格控件的高度。 我認爲你可以輕鬆地讓它適用於你的情況。
不應該太難。您需要創建一個EventTrigger,該EventTrigger具有一個以網格爲目標的BeginStoryboard並使用DoubleAnimation縮小列寬。 The example here has a similar setup. EventTrigger將繼續按鈕,DoubleAnimation的StoryBoard.Target將指向您希望縮小的ColumnDefinition。
好吧,這樣做效果不好。您不能直接縮小列,但可以將縮小列設置爲填充(width =「*」),設置網格和非縮小列的寬度,然後縮小整個網格。這確實有用。下面的示例工作:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Opacity Animation Example"
Background="White">
<StackPanel Margin="20">
<Grid Name="MyGrid" Width="200" HorizontalAlignment="Left">
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Rectangle HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Grid.Column="0" Fill="Red"/>
<Rectangle HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Grid.Column="1" Fill="Blue"/>
</Grid>
<Button Name="hideButton">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyGrid"
Storyboard.TargetProperty="(Grid.Width)"
From="200" To="100"
Duration="0:0:2"
AutoReverse="True" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</StackPanel>
</Page>
你可以做的另一件事是動畫內容,並設置網格,以自動調整到內容,它會順利執行的內容改變大小。
您也可以使用GridLength動畫實現此功能,請參閱此處的示例http://marlongrech.wordpress.com/2007/08/20/gridlength-animation/使用此方法可以操縱任何給定的Grid.Column或Grid.Row大小。
爲了您的特殊需要,只需在Width =「Auto」中放置第一列,然後在第二列中添加*,爲第一列中的內容設置動畫效果。
您還可以使用從凱文的袋鄰花樣顯示控制,http://j832.com/bagotricks/
我已經採取了託德米蘭達的C#源代碼並對其進行了修改,以演示如何動畫化DataGrid列寬度的縮小&的擴展。
這裏的源代碼
http://www.pocketpctoolkit.com/WPF/DataGridColumnWidthAnimation.zip
基本上,你點擊一個複選框,並取其DataGrid中列有他們的「MinWidth」值設置爲0將被縮小到零寬度。再次單擊複選框,這些列將回到原始寬度。
此WPF代碼還演示瞭如何在代碼後面創建動畫/故事板。
你需要創建一個GridLengthAnimation類(從代碼中:http://windowsclient.net/learn/video.aspx?v=70654)
public class GridLengthAnimation : AnimationTimeline
{
public GridLengthAnimation()
{
// no-op
}
public GridLength From
{
get { return (GridLength)GetValue(FromProperty); }
set { SetValue(FromProperty, value); }
}
public static readonly DependencyProperty FromProperty =
DependencyProperty.Register("From", typeof(GridLength), typeof(GridLengthAnimation));
public GridLength To
{
get { return (GridLength)GetValue(ToProperty); }
set { SetValue(ToProperty, value); }
}
public static readonly DependencyProperty ToProperty =
DependencyProperty.Register("To", typeof(GridLength), typeof(GridLengthAnimation));
public override Type TargetPropertyType
{
get { return typeof(GridLength); }
}
protected override Freezable CreateInstanceCore()
{
return new GridLengthAnimation();
}
public override object GetCurrentValue(object defaultOriginValue, object defaultDestinationValue, AnimationClock animationClock)
{
double fromValue = this.From.Value;
double toValue = this.To.Value;
if (fromValue > toValue)
{
return new GridLength((1 - animationClock.CurrentProgress.Value) * (fromValue - toValue) + toValue, this.To.IsStar ? GridUnitType.Star : GridUnitType.Pixel);
}
else
{
return new GridLength((animationClock.CurrentProgress.Value) * (toValue - fromValue) + fromValue, this.To.IsStar ? GridUnitType.Star : GridUnitType.Pixel);
}
}
}
而對於RowDefinition/ColumnDefinition故事板。
<Window.Resources>
<Storyboard x:Key="ColumnAnimation">
<Animations:GridLengthAnimation
BeginTime="0:0:0"
Duration="0:0:0.1"
From="0*"
Storyboard.TargetName="ColumnToAnimate"
Storyboard.TargetProperty="Width"
To="10*" />
</Storyboard>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition x:Name="ColumnToAnimate" Width="0*" />
</Grid.ColumnDefinitions>
</Grid>
- 1. XAML沒有WPF - 動畫
- 2. WPF Grid Grid Splitter沒有拆分
- 3. ng-grid headerRowTemplate - 有沒有人使用過?
- 4. WPF動畫沒有得到觸發時
- 5. UIView動畫沒有動畫
- 6. 有沒有人用過WPF DataGrid的ADOMD.NET?
- 7. SurfaceView沒有動畫
- 8. presentModalViewController沒有動畫
- 9. CAShapeLayer沒有動畫
- 10. Flexslider沒有動畫
- 11. ViewFlipper沒有動畫?
- 12. 有沒有辦法在WPF中爲圖像的邊緣添加動畫?
- 13. WPF中可能有形狀動畫嗎?
- 14. 在沒有ButtonChrome的WPF按鈕按動畫?
- 15. Dialog在Android中沒有動畫
- 16. PushButton在Qt4中沒有動畫
- 17. WPF - 沒有容器的DataTemplate,作爲Grid中行的項目?
- 18. WPF動畫:檢測是否有任何動畫正在處理?
- 19. JQuery的動畫沒有動畫
- 20. iOS:UIView動畫,沒有動畫發生
- 21. 動畫layoutIfNeeded UITableView沒有動畫UITableViewCells
- 22. 沒有動畫框架的Qt動畫
- 23. 鏈式變換動畫沒有動畫
- 24. Zepto動畫回調沒有動畫
- 25. 動畫ViewGroup沒有動畫子視圖
- 26. jQuery的動畫沒有動畫
- 27. 動畫gif沒有提交動畫
- 28. 核心動畫:光柵沒有動畫
- 29. 動畫列表最初沒有動畫
- 30. 無法在cocos2d中加載plist動畫「沒有找到動畫」
尼斯視頻,謝謝:) – 2012-04-12 05:13:19