动画重叠在视线网格之外

时间:2015-02-09 00:09:00

标签: wpf

如何创建一个与窗口重叠但可移动的控件?

我希望我的usercontrol在窗口之外(不可见),只需按一下按钮就可以通过动画移动到视线/视线之外。动画部分,我得到了。我的问题是将对象放在屏幕的边缘(减去几个像素以允许按钮的可见性)并允许它移动而不改变窗口中的所有其他元素(就像它只是过去一样他们)。我已经尝试将网格留在"浮动"状态,只需在需要时移动渲染变换,但因为它没有特别停靠在任何东西上,所以当使用不同的屏幕尺寸时它完全不在视线范围内。我也尝试使用不同的zindex创建两个网格,但最后我失去了对较低索引的每个控件的访问权限。

1 个答案:

答案 0 :(得分:1)

xaml对象中最后声明的元素将是窗口中最顶层的元素。因此,您可以将覆盖网格声明为窗口/容器中的最后一个元素,并将边距设置为窗口外部,然后设置覆盖网格的边距属性的动画,以使其扫入窗口内部。像下面的代码应该会帮助你。您可以根据自己的需要进行更改。如果这是您正在寻找的东西,请告诉我。

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vc="clr-namespace:MultiValueConverterFromCode"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <vc:ConcatStringsConverter x:Key="ConcatStringsConverter"/>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <TextBox x:Name="text1" Text="Hello"/>
            <TextBox x:Name="text2" Text="World"/>
            <ToggleButton Content="Toggle" x:Name="toggle"/>
        </StackPanel>
        <Grid Background="Red" IsHitTestVisible="False" Opacity="0.3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Grid.Style>
                <Style TargetType="Grid">
                    <Setter Property="Margin" Value="525,0,0,0"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsChecked,ElementName=toggle}" Value="true">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ThicknessAnimation Duration="0:0:0.2" To="0,0,0,0" Storyboard.TargetProperty="Margin"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ThicknessAnimation Duration="0:0:0.2" To="525,0,0,0" Storyboard.TargetProperty="Margin"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Style>
        </Grid>
    </Grid>
</Window>