WPF:重叠动画-将网格移动到工具栏后面

用户名

我想在wpf的主窗口中移动一个窗口。在下面的示例中,我想将窗口“移动窗口”移动到主窗口的顶部,直到完全脱离主窗口。我使用TranslateTransform.Y动画进行此操作-移动窗口实际上是一个网格。问题是,我想将窗口移到工具栏后面目前,如果被移动工具栏。换句话说:我希望移动的窗口在工具栏后面消失。工具栏是停靠面板的一部分,它具有渐变背景,工具栏背景是透明的。不管我使用什么ZIndex,移动的窗口(网格)总是在工具栏上移动,并且总是仅被Windows客户区域所截断(因此它“消失”在Windows标题栏的后面)。如何获得这样的动画?

-------------------------------------------
|              Toolbar                    |
-------------------------------------------
|         -------------------             |
|         |   moving window |             |
|         -------------------             |
|                                         |
-------------------------------------------

我创建了一个快速而又肮脏的Non-MVVM演示项目,以使其更加清晰。这是主要的Window.xaml:

<Window x:Class="MovingWindowTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid Background="SlateGray">
    <DockPanel>
        <StackPanel DockPanel.Dock="Top" Orientation="Vertical">
            <Menu IsMainMenu="True" Background="Transparent" Panel.ZIndex="2">
                <Menu.ItemsPanel>
                    <ItemsPanelTemplate>
                        <DockPanel HorizontalAlignment="Stretch"/>
                    </ItemsPanelTemplate>
                </Menu.ItemsPanel>
                <MenuItem Header="Debug">
                    <MenuItem Header="Move window in" Click="MoveWindowIn_OnClick" />
                    <MenuItem Header="Move window out" Click="MoveWindowOut_OnClick" />
                </MenuItem>
            </Menu>
        </StackPanel>
        <Grid x:Name="contentGrid" Background="White"/>
    </DockPanel>
</Grid>

背后的代码:

public partial class MainWindow : Window
{
    private InnerWindow _InnerWindow;
    private InnerWindow InnerWindow 
    {
        get { return this._InnerWindow ?? ( this._InnerWindow = new InnerWindow() ); }
    }

    public MainWindow()
    {
        InitializeComponent();
        this.InnerWindow.Width = this.InnerWindow.Height = 100;
    }

    private void MoveWindowIn_OnClick( object sender, RoutedEventArgs e )
    {            
        Panel.SetZIndex( this.contentGrid, 1 );
        this.InnerWindow.Visibility = Visibility.Visible;
        this.contentGrid.Children.Add( this.InnerWindow );
        TranslateTransform trans = new TranslateTransform();
        DoubleAnimation anim = new DoubleAnimation(-100, 0, new Duration( new TimeSpan( 0, 0, 0, 3 ) ) );
        this.InnerWindow.RenderTransform = trans;
        trans.BeginAnimation( TranslateTransform.YProperty, anim );
    }

    private void MoveWindowOut_OnClick( object sender, RoutedEventArgs e )
    {
        TranslateTransform trans = new TranslateTransform();
        DoubleAnimation anim = new DoubleAnimation( 0, -100, new Duration( new TimeSpan( 0, 0, 0, 3 ) ) );
        this.InnerWindow.RenderTransform = trans;
        anim.Completed += ( o, args ) => this.contentGrid.Children.Remove( this.InnerWindow ); ;
        trans.BeginAnimation( TranslateTransform.YProperty, anim );
    }
}

InnerWindow只是一个具有以下xaml的超级简单的用户控件:

<UserControl x:Class="MovingWindowTest.InnerWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" Background="Red" VerticalAlignment="Top"
         d:DesignHeight="100" d:DesignWidth="100">
<Grid>
    <TextBlock FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center">TEST</TextBlock>    
</Grid>

将InnderWindow移入时,尽管菜单具有较高的ZIndex,但它与Menu重叠。请注意,InnerWindow已添加到菜单下的contentGrid。当我将ClipToBounds添加到内部窗口时,它没有区别。

罗尔·范·韦斯特罗普

移动窗口的父级是什么?DockPanel还包含工具栏或其他控件吗?您是否尝试过在移动窗口上设置ClipToBounds属性?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ScrollView重叠工具栏

来自分类Dev

PreferenceFragment重叠工具栏

来自分类Dev

工具栏与PreferenceFragment重叠

来自分类Dev

视图与工具栏重叠

来自分类Dev

工具栏与LinearLayout重叠

来自分类Dev

工具栏与状态栏重叠

来自分类Dev

Android底栏重叠工具栏

来自分类Dev

片段与AppCompat工具栏重叠

来自分类Dev

工具栏不与TabLayout重叠

来自分类Dev

如何使工具栏不重叠?

来自分类Dev

工具栏重叠相对布局

来自分类Dev

工具栏重叠回收视图

来自分类Dev

工具栏按钮片段重叠

来自分类Dev

如何将溢出菜单放置在工具栏下方而不是溢出菜单与应用栏重叠

来自分类Dev

将KENDOUI工具栏与网格工具栏集成

来自分类Dev

工具栏在状态栏下方重叠

来自分类Dev

WPF工具栏项呈现失败

来自分类Dev

将CSS动画转换为WPF动画

来自分类Dev

将CSS动画转换为WPF动画

来自分类Dev

隐藏操作栏/工具栏时使内容动画化

来自分类Dev

Recyclerview中的Cardview与折叠的工具栏重叠

来自分类Dev

工具栏与坐标布局下的活动重叠

来自分类Dev

工具栏与包含片段的内容(LinearLayout)重叠

来自分类Dev

工具栏小部件与滚动视图重叠

来自分类Dev

显示隐藏的工具栏动画不流畅

来自分类Dev

真棒字体+ Bootstrap工具栏动画问题

来自分类Dev

动画将 View 移动到错误的位置

来自分类Dev

动画,将用户控件移动到新的网格位置

来自分类Dev

VS2015 WPF调试黑色工具栏