目標是重復使用固定的彈窗樣式,並提供確認和取消按鈕,而彈窗的具體內容則由傳參決定。
為了達到目的,使用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的窗口在失去焦點后無法找到的問題