Vấn đề là cửa sổ WPF chỉ lấy system.form.window vì vậy tôi không thể đặt Excel làm đối tượng chủ sở hữu trong ứng dụng VSTO của tôi, vì addin VSTO chỉ hiển thị Excel của hwnd, hoặc cửa sổ hoạt động của nó như là một cửa sổ bản địa vì nó là COM. Điều đó có nghĩa là khi WindowStartUpLoadation được đặt thành chủ sở hữu trung tâm thì nó không hoạt động. Vì vậy, tôi buộc phải làm việc này.Cách căn giữa cửa sổ WPF trong Excel VSTO addin
Những gì tôi đã đưa ra cho đến nay sau khi đọc this site là để thử và tự căn giữa cửa sổ, nhưng ngay cả với ví dụ đơn giản, cửa sổ của tôi không bao giờ xuất hiện ở giữa.
private static void CenterWpfWindowInExcel(WpfParameterDialog wpfDialog)
{
WindowInteropHelper helper = new WindowInteropHelper(wpfDialog);
helper.Owner = new IntPtr(Globals.ExcelAddin.Application.Hwnd);
// Manually calculate Top/Left to appear centered
double nonWpfOwnerLeft = Globals.ExcelAddin.Application.ActiveWindow.Left; // Get non-WPF owner’s Left
double nonWpfOwnerWidth = Globals.ExcelAddin.Application.ActiveWindow.Width; // Get non-WPF owner’s Width
double nonWpfOwnerTop = Globals.ExcelAddin.Application.ActiveWindow.Top; // Get non-WPF owner’s Top
double nonWpfOwnerHeight = Globals.ExcelAddin.Application.ActiveWindow.Height; // Get non-WPF owner’s Height
wpfDialog.WindowStartupLocation = WindowStartupLocation.Manual;
wpfDialog.Left = nonWpfOwnerLeft + (nonWpfOwnerWidth - wpfDialog.Width)/2;
wpfDialog.Top = nonWpfOwnerTop + (nonWpfOwnerHeight - wpfDialog.Height)/2;
}
Bất kỳ ý tưởng nào?
* Vui lòng làm rõ vấn đề cụ thể của bạn hoặc thêm các chi tiết bổ sung để làm nổi bật chính xác những gì bạn cần. Như nó hiện đang được viết, thật khó để nói chính xác những gì bạn đang yêu cầu. * –
Tôi đã chỉnh sửa nó một chút để làm rõ ý nghĩa của tôi, bây giờ nó có ý nghĩa hơn không? Tôi rất vui khi xây dựng chi tiết cụ thể hơn. –