Windows 8 如何创建像CameraCaptureUI.CaptureFileAsync这样的对话框?

Windows 8 如何创建像CameraCaptureUI.CaptureFileAsync这样的对话框?,windows-8,windows-runtime,winrt-xaml,Windows 8,Windows Runtime,Winrt Xaml,我想创建一个与方法类似的库,即在方法调用时,它将打开一个带有标准反向导航的全屏页面,并将结果返回给调用方 我希望能够以调用CaptureFileAsync的相同方式调用它: var dialog = new Library.Dialog(); var result = await dialog.Show(); 在Show方法中,我当前正在导航到我自己的页面并返回一个任务,调用者可以等待该任务: public Task<string> Show() { var task =

我想创建一个与方法类似的库,即在方法调用时,它将打开一个带有标准反向导航的全屏页面,并将结果返回给调用方

我希望能够以调用CaptureFileAsync的相同方式调用它:

var dialog = new Library.Dialog();
var result = await dialog.Show();
Show
方法中,我当前正在导航到我自己的页面并返回一个
任务
,调用者可以等待该任务:

public Task<string> Show()
{
    var task = new Task<string>(() => result);

    var frame = ((Window.Current.Content) as Frame);
    frame.Navigate(typeof(DialogPage));

    return task;
}
公共任务显示()
{
var任务=新任务(()=>结果);
var frame=((Window.Current.Content)作为frame);
框架导航(typeof(DialogPage));
返回任务;
}
当对话框关闭时(通过导航返回取消或通过按下按钮确认),我调用
task.Start()
,这将导致结果返回给等待的调用者

问题是,当调用
Frame.GoBack()
时,会创建上一页的新实例,结果会返回到不再显示的旧实例。这不是
CaptureFileAsync
的工作方式:在这种情况下,保持调用页面的相同实例


我的问题是:如何显示库中的页面而不影响框架导航并无意中创建调用页面的新实例?

您可以将所有UI放在弹出窗口上。

您可以将所有UI放在弹出窗口上。

请查看

它将使用弹出窗口的所有问题抽象化,并处理动画、禁用控件访问等问题。

看一看


它抽象了使用弹出窗口的所有问题,并处理动画、禁用控件访问等问题。

我也有同样的问题,这就是我想到的:

XAML

<Grid x:Name="MainGrid" 
      Background="#7F000000">
    <Grid Width="480" Height="180" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Black">
        <StackPanel>
            <TextBlock Text="Custom Capture!" Style="{StaticResource HeaderTextBlockStyle}" Margin="20"/>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Button x:Name="SaveButton" Content="Save" HorizontalAlignment="Center" Click="CloseButton_Click"/>
                <Button x:Name="CloseButton" Content="Close" HorizontalAlignment="Center" Click="CloseButton_Click"/>
            </StackPanel>
        </StackPanel>
    </Grid>
</Grid>

我也有同样的问题,这就是我想到的:

XAML

<Grid x:Name="MainGrid" 
      Background="#7F000000">
    <Grid Width="480" Height="180" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Black">
        <StackPanel>
            <TextBlock Text="Custom Capture!" Style="{StaticResource HeaderTextBlockStyle}" Margin="20"/>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Button x:Name="SaveButton" Content="Save" HorizontalAlignment="Center" Click="CloseButton_Click"/>
                <Button x:Name="CloseButton" Content="Close" HorizontalAlignment="Center" Click="CloseButton_Click"/>
            </StackPanel>
        </StackPanel>
    </Grid>
</Grid>

听起来是个好主意。我今天上班的路上正在想这个。我会让你知道结果的。听起来是个好主意。我今天上班的路上正在想这个。我会让你知道它是如何工作的。好吧,这并不是我最初问题的答案,但它看起来像一个很好的包装器,使弹出窗口的工作更容易。你有没有考虑过用它制作一个图书馆,然后把它放在NuGet上?没有,但是如果有人愿意的话,我可以帮助他们。你为什么说这无助于你原来的问题?您希望导航到一个不会导致上一页丢失上下文的“页面”。这正是它所做的(上面的弹出式答案被标记为“答案”-这只是让它更容易)你是对的,它可能不是一个直接的答案,但它确实有助于它的工作:)好吧,它不完全是我原来问题的答案,但它看起来像一个很好的包装,使使用弹出式窗口更容易。你有没有考虑过用它制作一个图书馆,然后把它放在NuGet上?没有,但是如果有人愿意的话,我可以帮助他们。你为什么说这无助于你原来的问题?您希望导航到一个不会导致上一页丢失上下文的“页面”。这正是它所做的(上面弹出的答案被标记为“答案”-这只是让它更容易)你是对的,它可能不是一个直接的答案,但它确实有助于它的工作:)
CustomCaptureControl capture = new CustomCaptureControl();
StorageFile file = await capture.ShowAsync();