我创建了一个ContentDialog来应用一个Style(我不能用一个Message Dialog和一个PopUp来应用),但是我遇到了问题,它不可移动或者我可以&#39 ; t关闭它就像我点击Groove App中的按钮" Connexion"时出现的框架一样
请您知道,我可以在the ContentDialog style修改哪一部分以使此ContentDialog可移动并将其关闭,就像顶部的图像一样
我在通用应用上工作
答案 0 :(得分:6)
请您知道,我可以在ContentDialog样式中修改哪一部分来移动此ContentDialog并将其关闭,就像顶部的图像一样。
我担心ContentDialog
不可移动,你在Groove应用程序或系统的邮件应用程序中显示的图像不是ContentDialog
,实际上,这个“对话框”由{ {3}}。如果我们使用ProcessMonitor跟踪此UI,我们会发现这是一个系统应用程序C:\ Windows \ SystemApps \ Microsoft.AccountsControl_cw5n1h2txyewy。您可以在SO上看到类似问题中的图片和信息:UserDataAccountManager.ShowAddAccountAsync。
对于您的问题,我们无法启动Microsoft.AccountsControl等系统应用程序获取结果,我们只能使用API UserDataAccountManager.ShowAddAccountAsync
来调用它。但您可以创建一个UWP应用,并针对其他应用的结果启动此应用,为此,请参阅UWP Modal Window。
或者,如果您只想要一个可移动的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 :(得分:1)
我认为你可以用另一种方式做到:
答案 2 :(得分:0)
这是我的做法,因为从现在到4年前我都没有找到答案:)
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
);
};