使内容对话框像Groove应用程序中的那样移动

我创建了一个ContentDialog来应用一个Style(我不能用一个Message Dialog和一个PopUp来应用),但是我遇到了问题,它不能移动或我无法关闭它就像我出现的Frame一样单击Groove应用程序中的“Connexion”按钮 在此处输入图像描述

请你有任何想法,我可以在ContentDialog样式中修改哪一部分,以使这个ContentDialog可以移动并关闭它像顶部的图像

我在一个通用应用程序上工作

请问你有什么想法,我可以在ContentDialog样式中修改哪一部分来使这个ContentDialog可以移动并像顶部的图像一样关闭它。

我担心ContentDialog不可移动,你在Groove应用程序或系统的邮件应用程序中显示的图像不是ContentDialog ,实际上,这个“对话框”由UserDataAccountManager.ShowAddAccountAsync调用。 如果我们使用ProcessMonitor跟踪此UI,我们会发现这是一个系统应用程序C:\ Windows \ SystemApps \ Microsoft.AccountsControl_cw5n1h2txyewy。 您可以在SO: UWP模态窗口中看到类似问题中的图片和信息。

对于您的问题,我们无法启动Microsoft.AccountsControl等系统应用程序的结果,我们只能使用API UserDataAccountManager.ShowAddAccountAsync来调用它。 但是你可以创建一个UWP应用程序,并为另一个应用程序的结果启动此应用程序,为此,请参阅启动应用程序获取结果 。

或者,如果您只想要一个可移动的UI,您可以在您的应用程序中创建一个新窗口,并更改此新窗口的大小,使其像ContentDialog一样弹出行为,但是这个新窗口将显示您的应用程序的标题,这不是除去。

如何创建新窗口? 例如:

  private async void OnClick(object sender, RoutedEventArgs e) { var newCoreAppView = CoreApplication.CreateNewView(); var appView = ApplicationView.GetForCurrentView(); await newCoreAppView.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low, async () => { var window = Window.Current; var newAppView = ApplicationView.GetForCurrentView(); var frame = new Frame(); window.Content = frame; frame.Navigate(typeof(BlankPage)); window.Activate(); await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newAppView.Id, ViewSizePreference.Default, appView.Id, ViewSizePreference.Default); }); } 

以及如何更改新窗口的大小? 例如,在新窗口中显示的页面的cs文件中:

 public BlankPage() { this.InitializeComponent(); this.Loaded += Page_Loaded; } private void Page_Loaded(object sender, RoutedEventArgs e) { var s = ApplicationView.GetForCurrentView(); s.TryResizeView(new Size { Width = 600, Height = 320 }); } 

这将形成600宽度和320高度的窗口。

我想你可以用另一种方式做到这一点:

  1. 创建UserControl,像弹出窗口一样定义UI。
  2. 将ManipulationMode设置为Translate。
  3. 处理ManipulationDelta事件以移动
  4. UserControll(让我们将CompositeTransform作为RenderTransform放置)。
  5. 根据需要实现动画使用页面中的UserControll