WPF 自定义内容的弹窗

目标是重复使用固定的弹窗样式,并提供确认和取消按钮,而弹窗的具体内容则由传参决定。
为了达到目的,使用ContentControl设置内容,并通过新增ShowDialog方法为确认按钮添加业务逻辑。
效果如图:

绿色框的部分为自定义内容

关键代码

设置ContentControl

<ContentControl Grid.Row="0" Margin="0" x:Name="contentContainer"  />
public CustomDialog(UserControl control, string title, Window window = null)
{
    InitializeComponent();

    Title = title;
    //设置内容
    contentContainer.Content = control;
}

新增ShowDialog方法

public void ShowDialog(Func<bool> onOKCallback)
{
    btnOK.Click += (s1, e1) => {
        try
        {
            var fOK = true;
            if (onOKCallback != null)
            {
                fOK = onOKCallback();
            }
            if (fOK)
            {
                Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    };
    ShowDialog();
}

调用弹窗,TestCustomDialogContentControl是自定义内容

CustomDialog dialog = new CustomDialog(new TestCustomDialogContentControl(), "自定义弹窗");
dialog.ShowDialog(()=> 
{
    return true;
});

关于ShowInTaskbar="False"的问题,请看解决ShowInTaskbar=false的窗口在失去焦点后无法找到的问题

示例代码

CustomDialogs

参考资料

ContentControl 类

原文地址:https://www.cnblogs.com/Lulus/p/13754638.html