我正在创建一个显示一些警报的应用程序。 使用MessageBox.Show它可以,但它对这个项目很难看。它是一个类似Metro的应用程序,因此我们创建了类似Metro的MessageBox。
我们的自定义MessageBox是一个网格,可以在需要时更改其可见性。 问题是真正的MessageBox会阻止用户点击“确定”的执行工具。
那么,我怎样才能模拟这种行为?
答案 0 :(得分:4)
将自定义消息框设为表单。然后你可以调用customMessageBoxFormInstance.ShowDialog()
..它阻止与消息框完全相同。
这就是你要做的事情:
MessageBox
的表单。也许你可以将你的网格移动到它里面。DialogResult
属性设置为OK
。在您希望显示警报的任何地方使用此选项:
if (customMessageBoxInstance.ShowDialog() == DialogResult.OK) {
// they clicked okay..
}
它会完全阻止您MessageBox
做的事情。
答案 1 :(得分:1)
您的自定义显示需要阻止,直到单击该按钮,因此该伪代码应该有效,但可能存在更好的解决方案。 MessageBox的UI最好在一个单独的线程上运行,但Show会从你的主线程中调用。
void Show()
{
// set MessageBox visible
...
// Wait until ok is pressed
while(!complete){
Thread.sleep(100);
};
complete = false;
return;
}
// onClick handler for the OK button
void onClick()
{
complete = true;
// set message box invisible
}
private bool complete;
答案 2 :(得分:1)
这就是我所做的:
<Grid>
<Grid x:Name="DialogOverlay">
</Grid>
<Grid x:Name="ViewContainer">
<Grid>
</Grid>
显示模式对话框时,将其放在DialogOverlay中,使叠加层可见并禁用ViewContainer网格。这可以防止用户单击/跳转到常规UI。
当对话框关闭时,你应该隐藏过多的并启用ViewContainer。
答案 3 :(得分:0)
我在MVVM中使用DialogService - 您可以为CustomMessagebox实现此功能。
var result = this.customMessageboxDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM);
... do anything with the dialog result...