【发布时间】:2015-10-22 14:15:03
【问题描述】:
有什么方法可以根据点击事件的某些条件停止 Button 命令的执行?
实际上,我希望在我们的应用程序中单击某些按钮时弹出确认消息。为了使其成为通用解决方案,我做了以下工作:
- 我有 WPF 按钮类调用
AppBarButton的扩展,它已经包含一些依赖属性。 - 我还有 2 个属性如下:
IsActionConfirmationRequired和ConfirmationActionCommand。
如果IsActionConfirmationRequired 然后在左键点击事件中,我将打开确认弹出窗口。
有什么方法可以避免创建新的ConfirmationActionCommand,并使用Button 的相同Command 属性?如果我设置Command,然后在Button 上单击,即使用户未确认操作仍然执行按钮命令,我也会遇到问题。
C#:
public class AppBarButton : Button
{
public AppBarButton()
{
this.Click += AppBarButton_Click;
}
private void AppBarButton_Click(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
if (button == null || IsActionConfirmationRequired == false || ConfirmationActionCommand == null)
return;
const string defaultMessage = "Do you really want to {0}";
string confirmationPopUpMessage = string.IsNullOrEmpty(ActionConfirmationMessage)
? DebugFormat.Format(defaultMessage, button.Content)
: ActionConfirmationMessage;
ConfirmationDailogDetails confirmationDailogDetails = new ConfirmationDailogDetails
{
Message = confirmationPopUpMessage,
ActionName = button.Content.ToString(),
Template = button.Template,
ActionCommand = ConfirmationActionCommand
};
//instead of ConfirmationActionCommand want to use base.Command
ConfirmationDailog dialog = new ConfirmationDailog(confirmationDailogDetails)
{
PlacementTarget = button,
IsOpen = true
};
}
public static readonly DependencyProperty IsActionConfirmationRequiredProperty =
DependencyProperty.Register("IsActionConfirmationRequired", typeof(bool), typeof(AppBarButton));
public static readonly DependencyProperty ActionConfirmationMessageProperty =
DependencyProperty.Register("ActionConfirmationMessage", typeof(string), typeof(AppBarButton));
public static readonly DependencyProperty ConfirmationActionCommandProperty =
DependencyProperty.Register("ConfirmationActionCommand", typeof(ICommand), typeof(AppBarButton));
/// <summary>
/// Gets or sets the flag to show the confirmation popup on before taking any action on App Bar button click.
/// Also its required to set the command in Tag Property of the App Bar button not in the Command Property, then only required command will fire only when user
/// confirms and click on the action button on confirmation popup.
/// </summary>
public bool IsActionConfirmationRequired
{
get { return (bool)GetValue(IsActionConfirmationRequiredProperty); }
set { SetValue(IsActionConfirmationRequiredProperty, value); }
}
/// <summary>
/// Gets or sets the confirmation message in confirmation popup before taking any action on App Bar button click.
/// </summary>
public ICommand ConfirmationActionCommand
{
get { return (ICommand)GetValue(ConfirmationActionCommandProperty); }
set { SetValue(ConfirmationActionCommandProperty, value); }
}
}
XAML:
<controls:AppBarButton x:Key="WithdrawAll"
AppBarOrder="1"
PageIndex="1"
AppBarOrientation="Left"
Content="Withdraw" IsActionConfirmationRequired="True"
ConfirmationActionCommand="{Binding WithdrawAllCommand}"
Template="{StaticResource DeleteCircleIcon}" />
请提出一些建议。我什么也找不到。已经尝试将CanExecute 设置为 false,但它的 make 按钮禁用,所以没有用。我只是简单的不想再做一个命令,使用这个AppBarButton的开发者需要设置ConfirmationActionCommand不正常Command。
【问题讨论】:
-
您好,您是否尝试过将 click 事件绑定到您的 xaml.cs 中,您可以通过它们检查按钮上的属性并调用基本点击事件。
-
只有当对话框返回
true时才显示ConfirmationDailog并执行Button.Command?
标签: c# wpf button popup command