diff --git a/src/modules/Hosts/Hosts/Helpers/VisualTreeUtils.cs b/src/modules/Hosts/Hosts/Helpers/VisualTreeUtils.cs new file mode 100644 index 0000000000..4be55866d9 --- /dev/null +++ b/src/modules/Hosts/Hosts/Helpers/VisualTreeUtils.cs @@ -0,0 +1,67 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Media; + +namespace Hosts.Helpers +{ + // Taken from https://github.com/microsoft/microsoft-ui-xaml/blob/main/test/MUXControlsTestApp/Utilities/VisualTreeUtils.cs + // Original copyright header: + // Copyright (c) Microsoft Corporation. All rights reserved. + // Licensed under the MIT License. See LICENSE in the project root for license information. + public static class VisualTreeUtils + { + public static T FindVisualChildByType(this DependencyObject element) + where T : DependencyObject + { + if (element == null) + { + return null; + } + + if (element is T elementAsT) + { + return elementAsT; + } + + int childrenCount = VisualTreeHelper.GetChildrenCount(element); + for (int i = 0; i < childrenCount; i++) + { + var result = VisualTreeHelper.GetChild(element, i).FindVisualChildByType(); + if (result != null) + { + return result; + } + } + + return null; + } + + public static FrameworkElement FindVisualChildByName(this DependencyObject element, string name) + { + if (element == null || string.IsNullOrWhiteSpace(name)) + { + return null; + } + + if (element is FrameworkElement elementAsFE && elementAsFE.Name == name) + { + return elementAsFE; + } + + int childrenCount = VisualTreeHelper.GetChildrenCount(element); + for (int i = 0; i < childrenCount; i++) + { + var result = VisualTreeHelper.GetChild(element, i).FindVisualChildByName(name); + if (result != null) + { + return result; + } + } + + return null; + } + } +} diff --git a/src/modules/Hosts/Hosts/Views/MainPage.xaml b/src/modules/Hosts/Hosts/Views/MainPage.xaml index cfb9efc2d5..29a797b695 100644 --- a/src/modules/Hosts/Hosts/Views/MainPage.xaml +++ b/src/modules/Hosts/Hosts/Views/MainPage.xaml @@ -323,6 +323,7 @@ @@ -368,6 +369,7 @@ diff --git a/src/modules/Hosts/Hosts/Views/MainPage.xaml.cs b/src/modules/Hosts/Hosts/Views/MainPage.xaml.cs index c467511867..2fd1c82725 100644 --- a/src/modules/Hosts/Hosts/Views/MainPage.xaml.cs +++ b/src/modules/Hosts/Hosts/Views/MainPage.xaml.cs @@ -6,6 +6,7 @@ using System; using System.Threading.Tasks; using System.Windows.Input; using CommunityToolkit.Mvvm.Input; +using Hosts.Helpers; using Hosts.Models; using Hosts.Settings; using Hosts.ViewModels; @@ -181,5 +182,19 @@ namespace Hosts.Views } } } + + private void ContentDialog_Loaded_ApplyMargin(object sender, RoutedEventArgs e) + { + try + { + // Based on the template from dev/CommonStyles/ContentDialog_themeresources.xaml in https://github.com/microsoft/microsoft-ui-xaml + var border = Helpers.VisualTreeUtils.FindVisualChildByName(sender as ContentDialog, "BackgroundElement") as Border; + border.Margin = new Thickness(0, 32, 0, 0); // Should be the size reserved for the title bar as in MainWindow.xaml + } + catch (Exception ex) + { + Logger.LogError("Couldn't set the margin for a content dialog. It will appear on top of the title bar.", ex); + } + } } }