我希望我正在尝试使用Visual States ...
我想要做的是有一个按钮,在两个状态之间切换stackPanel:'In'和'Out'。然后,我会在按钮的单击事件上调用VisualStateManager.GoToState,以在两种状态之间切换。
我遇到的问题是我无法弄清楚如何将状态附加到StackPanel。它不会让我使用Expression Blend。所以我被卡住了......无论如何使用VisualStateManager来动画这个面板的动画? (我知道我可以使用故事板和创建和进出动画,但如果可能的话,我会考虑使用状态)
我真的希望这是可能的。否则VisualStateManager除了对按钮进行花哨的翻转效果之外还有什么好处呢?
感谢您的帮助!
答案 0 :(得分:2)
刚刚启动Blend并得到了这个:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
x:Class="WpfApplication1.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<StackPanel x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="PanelState">
<VisualState x:Name="In"/>
<VisualState x:Name="Out">
<Storyboard>
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="stackPanel">
<EasingThicknessKeyFrame KeyTime="0" Value="-65,15,0,0"/>
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<i:Interaction.Behaviors>
<ei:DataStateBehavior Binding="{Binding IsChecked, ElementName=toggleButton}" Value="True" TrueState="In" FalseState="Out"/>
</i:Interaction.Behaviors>
<Button Content="Button" Width="50" HorizontalAlignment="Left" Click="Button_Click"/>
<StackPanel x:Name="stackPanel" Height="100" HorizontalAlignment="Left" Margin="0,15,0,0">
<TextBlock><Run Text="Funnytext"/></TextBlock>
</StackPanel>
<ToggleButton x:Name="toggleButton" Content="Toggle" Width="50" HorizontalAlignment="Left"/>
</StackPanel>
</Window>
和代码背后:
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
var sgs=VisualStateManager.GetVisualStateGroups(LayoutRoot);
var sg=sgs[0] as VisualStateGroup;
VisualStateManager.GoToElementState(LayoutRoot, ((VisualState) sg.States[sg.CurrentState == sg.States[0]?1:0]).Name,true);
}
(不知道你的意思是什么Stackpanel所以我只包括两个)
编辑:我的不好,没注意到我没有包含点击处理程序。为方便起见,我提供了一个使用Togglebutton切换状态的示例...