在wpf中的窗口后面滑动表单

问题描述 投票:0回答:1

将其移植到 WPF

Slide form base Windos Forms

我正在尝试将其移植到 WPF,您认为这可以在 WPF 中实现吗?

滑动底座

我正在测试这个:

wpf-动画-如何使其滑入

还有这个:

从自定义位置使用幻灯片动画打开关闭弹出窗口

我想创建一个像macosx一样的抽屉

enter image description here

c# wpf forms slide drawer
1个回答
0
投票

如果您想要在 Winforms 上的第一个 gif 上显示的效果(抽屉从窗体下方滑动),要在 WPF 上实现类似的效果,您需要处理几个可能的问题。

首先,为了看到抽屉外面

Window
,您需要将
AllowTransparency
设置为True,将
WindowStyle
设置为None。

这是第一个问题,因为您现在缺少默认的窗口功能,例如最小化、最大化、拖动和关闭。更不用说现在还缺少 Window 默认

DropShadow
效果,如果你想拥有它,你需要自己创建它。

其次,响应能力,由于

WindowStyle
为“无”,因此还缺少
Window
的调整大小功能。如果你想把它带回来,现在有更大的问题,你需要非常小心布局并确保
RenderTransform.TranslateLayout
的所有值都是正确的,以便在抽屉打开时将抽屉移动到所需的值。窗口的大小会改变。

说了这么多,这是我的建议,如何实现幻灯片效果

<Window x:Class="WpfApp8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp8"
        Title="MainWindow"
        WindowStyle="None"
        AllowsTransparency="True"
        Background="Transparent"
        mc:Ignorable="d">

    <Grid Width="400" Height="400">
        <Grid.Resources>
            <Storyboard x:Key="TransformBorder">
                <DoubleAnimationUsingKeyFrames Storyboard.TargetName="movingBorder"
                                               Storyboard.TargetProperty="(Border.RenderTransform).(TranslateTransform.X)"
                                               Duration="0:0:0.3">
                    <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="400">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <QuadraticEase EasingMode="EaseInOut"/>
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>

        <Border x:Name="movingBorder"
                Background="LightBlue"
                RenderTransformOrigin="0.5,0.5">
            <Border.RenderTransform>
                <TranslateTransform x:Name="translateTransform" X="0" Y="0"/>
            </Border.RenderTransform>
        </Border>

        <Border Background="White">
            <Button x:Name="btnSlide"
                    Width="100"
                    Height="50"
                    Content="Slide"/>
            <Border.Effect>
                <DropShadowEffect ShadowDepth="0"
                                  Opacity="0.5"
                                  BlurRadius="20"
                                  Color="Black"/>
            </Border.Effect>
        </Border>

        <Grid.Triggers>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnSlide">
                <BeginStoryboard Storyboard="{StaticResource TransformBorder}"/>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>
</Window>

https://imgur.com/LB7EVEo

© www.soinside.com 2019 - 2024. All rights reserved.