using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Web.UI.WebControls.WebParts; using System.Windows; using System.Windows.Interop; namespace PdmSwPlugin.Common.Util.UI { /// /// MultiExWindow.xaml 的交互逻辑 /// public partial class MultiExWindow : Window, INotifyPropertyChanged { #region ... public virtual event PropertyChangedEventHandler PropertyChanged; public virtual void RaisePropertyChanged(string name) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } public void RaiseAndSetIfChanged(ref T old, T @new, [CallerMemberName] string propertyName = null) { old = @new; if (propertyName != null) { RaisePropertyChanged(propertyName); } } #endregion // Windows API 函数 [DllImport("user32.dll", SetLastError = true)] private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowLong(IntPtr hWnd, int nIndex); private const int GWL_STYLE = -16; // 窗口样式 private const int WS_MINIMIZEBOX = 0x00020000; // 最小化按钮样式 private string _title; public string title { get => _title; set => RaiseAndSetIfChanged(ref _title, value); } private string _header; public string header { get => _header; set => RaiseAndSetIfChanged(ref _header, value); } private ObservableCollection _exceptions; public ObservableCollection exceptions { get => _exceptions; set => RaiseAndSetIfChanged(ref _exceptions, value); } public MultiExWindow(DependencyObject parent, string title, List exceptions,string header = "异常信息") { this.title = title; this.header = header; InitializeComponent(); DataContext = this; table.Columns[0].Header = header; if (exceptions == null) { this.exceptions = new ObservableCollection(); } else { this.exceptions = new ObservableCollection(exceptions); } Owner = Window.GetWindow(parent); } private void Window_Loaded(object sender, RoutedEventArgs e) { // 获取窗口句柄 IntPtr hWnd = new WindowInteropHelper(this).Handle; // 获取当前窗口的样式 int currentStyle = GetWindowLong(hWnd, GWL_STYLE); // 移除最小化按钮 SetWindowLong(hWnd, GWL_STYLE, currentStyle & ~WS_MINIMIZEBOX); Dispatcher.Invoke(() => { table.ItemsSource = new ObservableCollection(exceptions); }); } } }