模拟 MessageBox.Show()

3
我正在使用WPF(c#)编写一个程序。我来自伊朗,所以我的语言是波斯语(从右到左)。我想制作一个带有更多按钮或其他控件的自定义MessageBox。
我使用简单的Window来显示消息。在C#中,当MessageBox显示时,用户不能点击或对其他窗口进行任何操作。我如何在我的窗口中模拟这个过程?
(在之前)我使用过WPFCustomeMessageBox库。请不要向我推荐此库。

2
您可以使用 Window.ShowDialog 来获取模态对话框。请参阅 MSDN - bash.d
@bash.d 这并没有解决从右到左对齐文本的问题,这也是他首先使用除MessageBox之外的东西的原因。 - Lars Kristensen
小伙子,仔细听!我说的是 Window.ShowDialog() 而不是 MessageBox.ShowDialog() - bash.d
@LarsKristensen,他的问题是:我使用一个简单的窗口来显示消息。在C#中,当MessageBox正在显示时,用户无法点击或执行任何其他窗口操作。我该如何在我的窗口中模拟这种情况?- 对于您的所有其他评论,请重复此过程。 - Louis van Tonder
@bash.d和其他所有人;你是对的,我想我有点太急于纠正每个人了。但既然他们已经评论了我的评论,我不会将它们删除 - 它将作为提醒我在未来更仔细地阅读问题 :) - Lars Kristensen
@LarsKristensen 没关系...这种情况可能会发生。 - bash.d
3个回答

3

使用.ShowDialog()显示模态对话框:

MyMsgBox.ShowDialog()

这将会停止执行直到消息框被关闭。请参见MSDN文档


这并没有解决从右到左对齐文本的问题,这也是他首先使用其他东西而不是MessageBox的原因。 - Lars Kristensen
1
实际上,情况并非如此。问题是关于模态对话框的。请仔细阅读。 - SysDragon

1
使用Window.Showdialog方法时,不要忘记设置窗口的父级,否则会出现奇怪的行为。
然后在Window类中定义预期返回值的属性,这些属性将由对话框结果填充。例如:
public void testDialog()
{
var return = new DialogModelReturn();
mywindow.ShowDialog(new DialogModel(return));

if (return.isOk)
{
}

}

以下这种思路应该可行。 另外:我建议将WindowStyle设置为none,或者至少只有一个关闭按钮,以获得“模态对话框”的感觉。

就像这样:

<Window x:Class="bla.bla"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Fortschritt" Icon="bla.png" Height="200" Width="600"
        WindowStyle="None" Background="RoyalBlue">

这并没有解决从右到左对齐文本的问题。 - Lars Kristensen
2
那不是他的问题,他问的是模态对话框功能。 - Christian Sauer

1

编辑:看起来我没有仔细阅读问题,并认为问题是关于无法在MessageBoxes中使用从右到左的对齐方式(这是通过MessageBoxOptions可能实现的)。


有一个重载的 MessageBox.Show() 方法,允许您指定 MessageBoxOptions。其中一些选项涉及从右到左的对齐。

我不知道伊朗使用的语言,所以您需要尝试使用自己的文本,但以下是如何指定选项(该方法的最后一个参数):

string message = "Test message.";
string caption = "RTL Test";
MessageBoxImage image = MessageBoxImage.Information;
MessageBoxButton button = MessageBoxButton.OK;
MessageBoxResult defaultResult = MessageBoxResult.OK;

MessageBox.Show(message, caption, button, image, defaultResult, MessageBoxOptions.RightAlign);
MessageBox.Show(message, caption, button, image, defaultResult, MessageBoxOptions.RtlReading);
MessageBox.Show(message, caption, button, image, defaultResult, MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);

这里有一篇关于选项的MSDN文章链接:MessageBoxOptions Enum (Winforms)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接