首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使内容对话框可移动,与Groove应用程序中的对话框类似

使内容对话框可移动,与Groove应用程序中的对话框类似
EN

Stack Overflow用户
提问于 2016-03-11 06:57:49
回答 3查看 1.4K关注 0票数 2

我已经创建了一个ContentDialog来应用样式(不能通过消息对话框和PopUp来应用),但是我对它有问题,它不能移动,或者我不能关闭它,就像我在Groove App中单击按钮“Connexion”时出现的框架一样

你有什么想法吗,我可以在the ContentDialog style中修改哪个部分来移动这个ContentDialog并关闭它,就像上面的图像一样

我在做一个通用的应用程序

EN

回答 3

Stack Overflow用户

发布于 2016-03-11 15:48:43

请你有任何想法,我可以修改在ContentDialog风格的部分,以使此ContentDialog可移动,并关闭它像上面的图像。

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

对于您的问题,我们无法启动结果的系统应用,我们只能使用UserDataAccountManager.ShowAddAccountAsync接口调用它。但你可以创建一个UWP应用程序,并启动此应用程序以获取来自另一个应用程序的结果,要执行此操作,请参阅Launch an app for results

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

如何创建新窗口?例如:

代码语言:javascript
复制
    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文件中:

代码语言:javascript
复制
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。

票数 7
EN

Stack Overflow用户

发布于 2016-03-11 08:37:15

我认为你可以用另一种方式来做:

  1. 创建一个UserControl,定义类似弹出窗口的UI。将
  2. 设置为ManipulationMode to Translate.
  3. Handle ManipulationDelta event to move
  4. UserControll (让我们根据需要将CompositeTransform作为页面动画使用UserControll
票数 1
EN

Stack Overflow用户

发布于 2020-07-08 21:31:18

这就是我是如何做到的,因为我从4年到现在都没有找到任何答案:)

代码语言:javascript
复制
                            var dialog = new ContentDialog()
                            {
                                Title = "This is a Title!",
                                ManipulationMode = ManipulationModes.All,
                            };
                            dialog.ManipulationDelta += delegate (object sender, ManipulationDeltaRoutedEventArgs e)
                            {
                                if(!e.IsInertial)
                                    dialog.Margin = new Thickness(
                                        dialog.Margin.Left + e.Delta.Translation.X,
                                        dialog.Margin.Top + e.Delta.Translation.Y,
                                        dialog.Margin.Left - e.Delta.Translation.X,
                                        dialog.Margin.Top - e.Delta.Translation.Y
                                        );
                            };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35929032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档