【发布时间】:2011-03-24 09:44:04
【问题描述】:
如何在 WPF C# 中在代码后面(没有 XAML)中创建自定义消息框(对话框)? 我用谷歌搜索,似乎没有找到解决方案。我想要一个带有图像和其他控件的 MessageBox。
【问题讨论】:
-
您是否尝试过使用 Popup WPF 控件?
标签: c# wpf custom-controls messagebox
如何在 WPF C# 中在代码后面(没有 XAML)中创建自定义消息框(对话框)? 我用谷歌搜索,似乎没有找到解决方案。我想要一个带有图像和其他控件的 MessageBox。
【问题讨论】:
标签: c# wpf custom-controls messagebox
你可以使用这个解决方案:
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();
【讨论】:
为什么不直接在 XAML 中创建自定义窗口,然后在代码隐藏中使用 showDialog()?
【讨论】:
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();
}
【讨论】:
对于图像,WPF 工具包中有源代码(或预构建的)http://wpftoolkit.codeplex.com/wikipage?title=MessageBox&version=31
如果您需要的不仅仅是一张图片、一行文本和几个按钮,那么您可能应该开始考虑使用通过 ShowDialog() 调用的新窗口
【讨论】:
我已经实现了一个 WPF MessageBox,它具有与普通的完全相同的界面,并且还可以通过标准 WPF 控件模板完全自定义:
特点
【讨论】: