如何在代码后面创建一个带有WPF C#中图像的自定义MessageBox?

时间:2011-03-24 09:44:05

标签: c# wpf custom-controls messagebox

如何在WPF C#中的后台代码(没有XAML)中创建自定义MessageBox(对话框)? 我用谷歌搜索,似乎没有找到解决方案。我想要一个带有图像和其他控件的MessageBox添加到它。

5 个答案:

答案 0 :(得分:3)

您可以使用此解决方案:

    string messageBoxText = "Do you want to save changes?";
    string caption = "Your caption";
    MessageBoxButton button = MessageBoxButton.YesNoCancel;
    MessageBoxImage icon = MessageBoxImage.Warning;
    MessageBox.Show(messageBoxText, caption, button, icon);

查看this文章,如果需要,我可以在自定义对话框段落中将所有Xaml重新编码为纯c#。

或者您可以创建自己的窗口并使用MyWindow.ShowDialog()

就像在这段代码中一样:

    Window wnd = new Window();
    Grid grid = new Grid();
    wnd.Height = 200;
    wnd.Width = 150;
    grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(100) });
    grid.RowDefinitions.Add(new RowDefinition {Height = GridLength.Auto });
    wnd.Content = grid;
    Image img = new Image();
    Button btn = new Button();
    btn.Content = "OK";
    btn.VerticalAlignment = VerticalAlignment.Bottom;
    Grid.SetRow(img, 0);
    Grid.SetRow(btn, 1); 
    grid.Children.Add(img);
    grid.Children.Add(btn);
    wnd.Owner = MyMainWindow;
    wnd.ShowDialog();

答案 1 :(得分:1)

为什么不在XAML中创建自定义窗口,然后在代码隐藏中使用showDialog()?

答案 2 :(得分:1)

XAML中的所有内容都可以在纯c#:

中重写
<Window>
 <Grid>
  <Grid.ColumnDefinition Width="50" />
  <Grid.ColumnDefinition Width="*">
  <Label Grid.Column="0" Content="Hello World!" />
 </Grid>
</Window>

将如下所示:

public void MakeWin(DependencyObject owner)
{
   MakeWin(Window.GetWindow(owner));
}

public void MakeWin(Window owner)
{
   Window window = new Window();
   Grid grid = new Grid();
   grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(50) });
   grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});
   window.Content = grid;

   Label label = new Label { Content = "Hello World!" };
   Grid.SetColumn(label, 0); // Depandency property
   grid.Children.Add(label);

   window.Owner = owner;
   window.ShowDialog();
}

答案 3 :(得分:1)

对于图像,WPF工具包中有源代码(或预构建的)http://wpftoolkit.codeplex.com/wikipage?title=MessageBox&version=31

如果您需要的不仅仅是图像,文本行和几个按钮,那么您应该开始只使用ShowDialog()调用的新窗口

答案 4 :(得分:1)

我已经实现了一个WPF MessageBox,它具有与普通接口完全相同的接口,并且还可以通过标准WPF控件模板完全自定义:

A Customizable WPF MessageBox

功能

  • 类WPFMessageBox具有与当前WPF MessageBox类完全相同的接口。
  • 作为自定义控件实现,因此可通过标准WPF控件模板完全自定义。
  • 有一个默认的控件模板,看起来像标准的MessageBox。
  • 支持所有常见类型的消息框:错误,警告,问题和信息。
  • 与打开标准MessageBox时的“哔”声相同。
  • 按Escape按钮作为标准MessageBox时支持相同的行为。
  • 提供与标准MessageBox相同的系统菜单,包括在消息框处于Yes-No模式时禁用“关闭”按钮。
  • 处理右对齐和从右到左的操作系统,与标准MessageBox相同。
  • 支持将所有者窗口设置为WinForms表单控件。