将其移植到 WPF
我正在尝试将其移植到 WPF,您认为这可以在 WPF 中实现吗?
我正在测试这个:
还有这个:
我想创建一个像macosx一样的抽屉
如果您想要在 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>