C# 如何知道哪个按钮点击了Rg.Plugins.Popup
我正在使用Xamarin格式的Rg.Plugins.Popup PCL,并在单击按钮后打开弹出窗口。我想知道的过程,我可以理解哪个按钮是点击弹出窗口,所以我可以实现下一部分的代码根据选择弹出窗口C# 如何知道哪个按钮点击了Rg.Plugins.Popup,c#,xamarin.forms,C#,Xamarin.forms,我正在使用Xamarin格式的Rg.Plugins.Popup PCL,并在单击按钮后打开弹出窗口。我想知道的过程,我可以理解哪个按钮是点击弹出窗口,所以我可以实现下一部分的代码根据选择弹出窗口 <pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:pages="
<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
x:Class="ATSDriver.PopupDemo">
<ScrollView>
<StackLayout VerticalOptions="Center" HorizontalOptions="FillAndExpand" BackgroundColor="#ffffff" >
<StackLayout BackgroundColor="White" Padding="2">
<StackLayout VerticalOptions="Center" HorizontalOptions="FillAndExpand" >
<Label Text="Order Item Picture " TextColor="Black" VerticalOptions="Center" ></Label>
</StackLayout>
<Button Text="Next Picture" x:Name="btnClose" Clicked="btnClose_Clicked" StyleClass="ButtonLightBlack"></Button>
<Button Text="Complete Picture" x:Name="btnComplete" Clicked="btnClose_Clicked" StyleClass="ButtonLightBlack"></Button>
</StackLayout>
</StackLayout>
</ScrollView>
调用弹出窗口
下面的代码,我使用的相机拍摄完第一张照片后,我会打开上面的弹出窗口。如果用户单击下一张图片,则用户将拍摄下一张图片。如果用户点击完整的图片,我将关闭相机并停止进程。目前我正在使用DisplayAlert
,但我想使用上面的弹出窗口
async void bttnDelivery_Clicked1(object sender, EventArgs e)
{
try
{
var testPopup = new PopupDemo();
await Navigation.PushPopupAsync(testPopup);
// var action2 = await DisplayAlert("Do you want to continue take pictures?", "", "Complete Pictures", "Next Picture");
}
catch (Exception ex)
{
}
}
我只想更改显示警报的下面代码部分以使用此弹出窗口
var action2 = await DisplayAlert("Do you want to continue take pictures?", "", "Complete Pictures", "Next Picture");
if (action2 == false)
{
goto Pic;
}
if (action2 == true)
{
}
希望我的问题对你来说是清楚的。提前感谢您的帮助我不知道我是否正确理解了您的问题,但我认为您可以使用两种不同的方法
<Button Text="Next Picture" x:Name="btnClose" Clicked="btnClose_Clicked" StyleClass="ButtonLightBlack"></Button>
<Button Text="Complete Picture" x:Name="btnComplete" Clicked="btnCompleted_Clicked" StyleClass="ButtonLightBlack"></Button>
将btnClose\u Clicked
更改为btnCompleted\u Clicked
然后你可以使用MessagingCenter
您的弹出窗口发送消息中心。您的页面订阅这些MessagingCenter
在btnCloseClicked中,您可以发送带有“下一步”的MessagingCenter;在btnCompletedClicked中,您可以发送一个带有“Completed”的MessagingCenter我过去也曾为这样的事情挣扎过,我制定了一种“模式”来解决我的问题,如下图所示。这段代码只是应用于您的场景的一个示例,但我认为您将了解主要内容。 我不确定这是在MVVM环境中实现它的最佳方式,但它对我来说非常有效 配方:
- 创建一个您想要处理的类型的
(bool、enum、一些更复杂的类)李>TaskCompletionSource
- 将任务发送到域上下文之外的页面,但请确保此外部上下文处理可能的结果
- 等待(或准备)收到有关所发送任务的答复
- 如果任务按预期执行,则处理结果
TaskCompletionSource
之外
public partial class PopupDemo : Rg.Plugins.Popup.Pages.PopupPage
{
private TaskCompletionSource<EnumAction> task;
public PopupDemo(TaskCompletionSource<EnumAction> taskCompletion)
{
InitializeComponent();
task = taskCompletion;
}
}
在外部页面设置的域上下文中接收结果
async void bttnDelivery_Clicked1(object sender, EventArgs e)
{
try
{
var taskResult = new TaskCompletionSource<EnumAction>();
taskResult.ContinueWith(result =>
{
if(result.IsCompleted)
{
switch (result.Result)
{
case EnumAction.NextPicture:
break; // Make your magic here
case EnumAction.CompletePicture:
break; // Make your magic here
default:
break; // Make your magic here
}
}
});
var testPopup = new PopupDemo(taskResult);
await Navigation.PushPopupAsync(testPopup);
}
catch (Exception ex)
{
}
}
async void bttnDelivery\u Clicked1(对象发送方,事件参数e)
{
尝试
{
var taskResult=new TaskCompletionSource();
taskResult.ContinueWith(结果=>
{
如果(结果已完成)
{
开关(result.result)
{
案例EnumAction.NextPicture:
打破;//在这里施展你的魔法
案例EnumAction.CompletePicture:
打破;//在这里施展你的魔法
违约:
打破;//在这里施展你的魔法
}
}
});
var testPopup=新的PopupDemo(taskResult);
等待导航.PushPopupAsync(testPopup);
}
捕获(例外情况除外)
{
}
}
如果你有更好的方法做这样的事情,请与我们分享
我希望它能对您有所帮助(抱歉出现任何英文错误)。我有一个问题,即当用户单击下一张图片或完整图片时,我在用户拍摄一张图片的同一部分调用它,我将弹出此弹出窗口以拍摄下一张或完整图片。我希望使用此弹出窗口而不是此
var action2=wait DisplayAlert(“您想继续拍照吗?”、“”、“完成照片”、“下一张照片”);
我不明白问题所在……您可以按“下一步”或“完成”吗?我在问题的弹出部分添加了说明在我的回答中添加了注释@a.Goutam
public partial class PopupDemo : Rg.Plugins.Popup.Pages.PopupPage
{
private TaskCompletionSource<EnumAction> task;
public PopupDemo(TaskCompletionSource<EnumAction> taskCompletion)
{
InitializeComponent();
task = taskCompletion;
}
}
private async void btnClose_Clicked(object sender, EventArgs e)
{
Navigation.PopPopupAsync();
task?.SetResult(EnumAction.NextPicture)
}
private async void btnComplete_Clicked(object sender, EventArgs e)
{
Navigation.PopPopupAsync();
task?.SetResult(EnumAction.CompletePicture)
}
protected override void OnDisappearing()
{
base.OnDisappearing();
if(task != null)
if(!task.Task.IsCanceled && !task.Task.IsFaulted && !task.Task.IsCompleted)
task.SetCanceled();
}
async void bttnDelivery_Clicked1(object sender, EventArgs e)
{
try
{
var taskResult = new TaskCompletionSource<EnumAction>();
taskResult.ContinueWith(result =>
{
if(result.IsCompleted)
{
switch (result.Result)
{
case EnumAction.NextPicture:
break; // Make your magic here
case EnumAction.CompletePicture:
break; // Make your magic here
default:
break; // Make your magic here
}
}
});
var testPopup = new PopupDemo(taskResult);
await Navigation.PushPopupAsync(testPopup);
}
catch (Exception ex)
{
}
}