【问题标题】:How to create, in code behind, a Custom MessageBox with Images in WPF C#?如何在 WPF C# 中的代码中创建带有图像的自定义消息框?
【发布时间】:2011-03-24 09:44:04
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过使用 Popup WPF 控件?

标签: c# wpf custom-controls messagebox


【解决方案1】:

你可以使用这个解决方案:

    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();

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      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();
      }
      

      【讨论】:

        【解决方案4】:

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

        如果您需要的不仅仅是一张图片、一行文本和几个按钮,那么您可能应该开始考虑使用通过 ShowDialog() 调用的新窗口

        【讨论】:

          【解决方案5】:

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

          A Customizable WPF MessageBox

          特点

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-11-02
            • 1970-01-01
            • 2012-12-11
            • 2015-05-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多