我用自己的枚举MessageBoxButton:
创建了自己的MessageBoxpublic enum MyMessageBoxButton
{
OK = MessageBoxButton.OK,
OKCancel = MessageBoxButton.OKCancel,
YesNoCancel = MessageBoxButton.YesNoCancel,
YesNo = MessageBoxButton.YesNo,
NowLaterCancel = 5,
}
正如您所看到的,它就像System.Windows.MessageBoxButton,其值更多。
对于我的MyMessageBox类,我有函数:
public static MessageBoxResult Show(String caption, String message, MyMessageBoxButton button, MessageBoxImage icon)
{
...
}
有没有办法用Show
来调用MessageBoxButton
并隐式地将值转换为MyMessageBoxButton
?
答案 0 :(得分:1)
您可以创建一个转换器方法,将MessageBoxButtons
转换为MyMessageBoxButton
,创建一个Show
方法的重载,该方法需要MessageBoxButtons
,然后在该方法中您可以进行转换并调用现有的Show
方法。
由于您没有为所有项目(例如AbortRetryIgnore
)设置匹配的枚举值,因此如果有人选择其中一项,您必须决定显示哪个按钮组合:
public static MyMessageBoxButton ConvertToMyMessageBoxButton(MessageBoxButtons input)
{
MyMessageBoxButton result;
switch (input)
{
case MessageBoxButtons.OK:
result = MyMessageBoxButton.OK;
break;
case MessageBoxButtons.OKCancel:
result = MyMessageBoxButton.OKCancel;
break;
case MessageBoxButtons.RetryCancel:
result = MyMessageBoxButton.NowLaterCancel;
break;
case MessageBoxButtons.YesNo:
result = MyMessageBoxButton.YesNo;
break;
case MessageBoxButtons.YesNoCancel:
result = MyMessageBoxButton.YesNoCancel;
break;
default:
// AbortRetryIgnore will fall through to this
result = MyMessageBoxButton.OKCancel;
break;
}
return result;
}
然后,您会在Convert
方法的重载中使用Show
方法进行转换并调用原始Show
:
public static MessageBoxResult Show(String caption, String message,
MessageBoxButtons button, MessageBoxImage icon)
{
return Show(caption, message, ConvertToMyMessageBoxButton(button), icon);
}
答案 1 :(得分:0)
您可以为Show()
创建一个带MessageBoxButton
的重载并对其进行强制转换:
public static MessageBoxResult Show(String caption, String message, MessageBoxButton button, MessageBoxImage icon)
{
return Show(caption, message, (MyMessageBoxButton)(int)button, icon);
}
不确定第一次投射到int
是否必要。不用先试试吧。
请注意,这取决于要匹配的两个枚举的值。例如,MessageBoxButton.YesNoCancel必须为3,就像MyMessageBoxButton一样。