uwp - UWP Flyout - 动画
问题描述
我是 Windows 编程的新手,我创建了一个看起来像“SettingsFlyout”的自定义“Flyout”,我想更改这个“Flyout”的动画,就像“SettingsFlyout”一样。我可以控制“Flyout”的动画吗?如果是这样,我可以创建与“SettingsFlyout”相同的动画吗?
解决方案
您可以使用Microsoft 社区工具包中的偏移动画来实现动画。我已经添加了您想要实现的示例动画。
Microsoft.Toolkit.Uwp.UI.Animations;
//主页.Xaml
<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="YourPage"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Button Click="settings_clicked" Content="Settings"/>
<Grid x:Name="Settings_Popup_Grid" Background="Transparent" Tapped="SettingsPopup_Grid_Tapped" Visibility="Collapsed"/>
<Popup HorizontalAlignment="Right" IsLightDismissEnabled="False" IsOpen="False" Opened="SettingsPopup_Opened" Closed="SettingsPopup_Closed" x:Name="SettingsPopup" VerticalAlignment="Stretch" >
<Border x:Name="SettingsPopupBorder" Width="320" Background="{ThemeResource SystemControlBackgroundAccentBrush}" BorderBrush="{StaticResource SystemControlBackgroundChromeMediumLowBrush}" Height="{Binding ActualHeight, ElementName=View_Grid,Mode=OneWay}" BorderThickness="1" VerticalAlignment="Stretch">
<ListView>
<ListViewItem Content="Settings" Foreground="White" FontWeight="SemiBold"></ListViewItem>
</ListView>
</Border>
</Popup>
</Grid>
</Page>
//MainPage.Xaml.cs
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void settings_clicked(object sender, RoutedEventArgs e)
{
SettingsPopupBorder.Height = ((Frame)Window.Current.Content).ActualHeight;
SettingsPopup.IsOpen = true;
if (SettingsPopup.IsOpen)
Settings_Popup_Grid.Visibility = Visibility.Visible;
else
Settings_Popup_Grid.Visibility = Visibility.Collapsed;
}
private async void SettingsPopup_Grid_Tapped(object sender, TappedRoutedEventArgs e)
{
await SettingsPopup.Offset(offsetX: 0,
offsetY: 0,
duration: 300, delay: 0).StartAsync();
SettingsPopup.IsOpen = false;
}
private void SettingsPopup_Closed(object sender, object e)
{
Settings_Popup_Grid.Visibility = Visibility.Collapsed;
}
private async void SettingsPopup_Opened(object sender, object e)
{
await SettingsPopup.Offset(offsetX: -320,
offsetY: 0,
duration: 300, delay: 0).StartAsync();
}
}
推荐阅读
- django - 有没有办法让枚举类型的文本选择字段接受具有人类可读值的传入帖子请求?
- google-apps-script - 如何使用 Findall 函数从 Row 获取 a1Notations
- javascript - react-native expo错误:未处理的承诺拒绝:TypeError:null不是对象(评估'RNAlarmNotification.scheduleAlarm')
- unit-testing - 如何在单元测试中测试被测方法内部调用的方法/查询的返回值?
- css - 如何使我的组件仅填充整个视口,因此它们没有滚动选项
- reactjs - 框架和库兼容性
- flask - Jinja2 设置和使用变量
- javascript - 如何过滤和分离嵌套对象
- postgresql - 使用 NestJS、TypeORM 和 PostgreSQL 创建实体时出错
- java - 试图在java中的上限内找到一个完美数而不创建方法