gpt4 book ai didi

xaml - 如何更改 ContentDialog 过渡?

转载 作者:行者123 更新时间:2023-12-03 14:30:19 25 4
gpt4 key购买 nike

Windows Phone 8.1 为对话框和弹出按钮引入了一个新的过渡,看起来像 Venetian blind .我不喜欢这样;我更喜欢它在 Windows Phone 8 中旋转/倾斜的样子。有什么办法可以改变它吗?

我试过这样的事情:

<ContentDialog.Transitions>
<TransitionCollection>
</TransitionCollection>
</ContentDialog.Transitions>

但它不会改变过渡。

最佳答案

您不能覆盖 ContentDialog 等中的转换。它们被设计为获得标准行为的简单方法,并且将始终使用 PopupThemeTransition。

如果您想要非标准行为,那么您可以编写一个使用您自己的 TransitionCollection 的自定义控件。我找不到任何与此相关的现有示例,但请查看 Callisto 的 CustomDialog 以了解一般概念。它模仿了 Windows MessageDialog,其内容位于全屏调光窗口上方水平居中的栏中,但移动 UI 以匹配 Windows Phone 的顶部停靠面板应该不难。

一旦您处于自己的控制之下,您就可以使用您喜欢的任何过渡。我手边没有 WP8 设备来查看过渡是什么,但是带有 Edge="Left"的 PaneThemeTransition 听起来与您的描述相符。如果没有,那么一旦您进行了转场,您可以将其换成您喜欢的转场或删除所有转场并应用您自己的 Storyboard动画。我要么坚持使用对用户有意义的标准过渡,要么进行完全自定义,因为主题过渡可能会再次更改。

创建一个看起来不错的面板非常简单。棘手的部分是如何显示控件。如果您将它包含在您的 Xaml 中,因此它是可视化树的一部分,那么您可以直接显示它。如果它不在可视化树中,那么您需要将其添加到可视化树中或将其托管在弹出窗口中。

这是一个快速而肮脏的 UserControl,它将自身托管在一个 Popup 中,并使用 PaneThemeTransition 从右侧滑入。

<UserControl
x:Class="App199.MyUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App199"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400"
PointerReleased="UserControl_PointerReleased">
<UserControl.Transitions>
<TransitionCollection>
<PaneThemeTransition Edge="Left"/>
</TransitionCollection>
</UserControl.Transitions>

<Grid>
<Grid.RowDefinitions>
<RowDefinition x:Name="statusBarRow" Height="0" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row ="1" Background="Black">
<Ellipse Height="100" Width="100" Fill="Yellow" />
<TextBlock>Lorem Ipsum</TextBlock>
<Rectangle Height="100" Width="100" Fill="Red" />
</StackPanel>
<Border Grid.Row="2" Background="#7F000000" />
</Grid>

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Phone.UI.Input;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236

namespace App199
{
public sealed partial class MyUserControl1 : UserControl
{
Popup hostPopup;
public MyUserControl1()
{
this.InitializeComponent();
hostPopup = new Popup();
hostPopup.Child = this;

Loaded += MyUserControl1_Loaded;
Unloaded += MyUserControl1_Unloaded;
}

void MyUserControl1_Loaded(object sender, RoutedEventArgs e)
{
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}

void MyUserControl1_Unloaded(object sender, RoutedEventArgs e)
{
HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}

public void Show()
{
this.Height = Window.Current.Bounds.Height;
this.Width = Window.Current.Bounds.Width;

var occRect = Windows.UI.ViewManagement.StatusBar.GetForCurrentView().OccludedRect;
statusBarRow.Height = new GridLength(occRect.Height);

hostPopup.IsOpen = true;
}

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
if (hostPopup.IsOpen)
{
hostPopup.IsOpen = false;
e.Handled = true;
}
}

private void UserControl_PointerReleased(object sender, PointerRoutedEventArgs e)
{
hostPopup.IsOpen = false;
}
}
}

关于xaml - 如何更改 ContentDialog 过渡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25842541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com