gpt4 book ai didi

c# - Windows 应用商店应用程序中的异步自定义对话框

转载 作者:行者123 更新时间:2023-12-01 16:26:30 26 4
gpt4 key购买 nike

是否可以在 Windows 应用商店应用程序中使用自定义内容创建模式(异步)对话框?

我知道您可以显示消息对话框,但只能显示一些文本和按钮。在我的应用程序中,我需要填充一个组合框并让用户选择其中一项,然后才能执行其余代码。

我已经找到了一些非异步对话框的内容(已附加代码)。到目前为止,它运行得很好。
但是,现在我需要再次与用户检查所选设备是否正常,并且消息对话框以某种方式显示在带有组合框的对话框上方。

有没有一种(简单的)方法来“等待”我的第一个对话框的结果?


这是我用于组合框对话框的自定义弹出窗口的代码:

public sealed partial class UsbSelectorPopup : UserControl {

public IList<DeviceInformation> deviceList { get; set; }
public int ChosenEntry { get; set; }

public UsbSelectorPopup(IList<DeviceInformation> deviceList) {
this.InitializeComponent();
this.deviceList = deviceList;
PopulateComboBox();
}

private void PopulateComboBox() {
...
}

public void OpenPopup() {
this.ParentPopup.IsOpen = true;
this.gdChild.Visibility = Visibility.Visible;
}

public void ClosePopup() {
this.ParentPopup.IsOpen = false;
this.gdChild.Visibility = Visibility.Collapsed;
}

private void ChooseUsbBtn_Click(object sender, RoutedEventArgs e) {
ChosenEntry = UsbComboBox.SelectedIndex;
ClosePopup();
}

private void CloseUsbBtn_Click(object sender, RoutedEventArgs e) {
ChosenEntry = 9999;
ClosePopup();
}

主页中的调用:

// get all the USB Devices
var devices = ExamProvider.CustomStorageMedium.DeviceCollection;

// ask user which usb device to use
UsbSelectorPopup popup = new UsbSelectorPopup(devices);
popup.OpenPopup();

// get chosen device out of list
var chosenDevice = devices[popup.ChosenEntry];

// work with data on usb stick
[...]

// ask user if he wants to continue with this device or choose another one
var result = await MessageBox.ShowAsync("You chose usb stick XYZ with file ABC on it. Do you want to continue?", MessageBoxButton.OkCancel);

(MessageBox是一个简单的Helper类,用于调用MessageDialog)

解决方案

感谢 Nate Diamond,我知道我应该寻找什么,所以我找到了这个答案: https://stackoverflow.com/a/12861824/2660864
我对其进行了一些更改,令人惊讶的是它现在可以工作了!

UsbSelectorPopup:

// Property
public TaskCompletionSource<int> UsbChosenTask { get; set; }

// in the constructor:
UsbChosenTask = new TaskCompletionSource<int>();

// In the Button Click Methods:
UsbChosenTask.TrySetResult(UsbComboBox.SelectedIndex);

通话:

UsbSelectorPopup popup = new UsbSelectorPopup(devices);
popup.OpenPopup();
var chosenEntry = await popup.UsbChosenTask.Task;
var chosenDevice = devices[popup.ChosenEntry];

最佳答案

XAML 有一个弹出控件,正是您想要的。

<Popup x:Name="popup" IsOpen="True">
<Grid Width="{Binding ActualWidth, ElementName=popup, Mode=OneWay}"
Height="{Binding ActualHeight, ElementName=popup, Mode=OneWay}">
<!-- your content here -->
<Rectangle Fill="Red" Opacity=".25" />
</Grid>
</Popup>

在后面的代码中,您可以通过切换 IsOpen 属性来打开和关闭它。

有道理吗?

祝你好运。

关于c# - Windows 应用商店应用程序中的异步自定义对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23472900/

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