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