mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-10-05 04:24:38 +13:00
0eef578377
New (latest) versions: Microsoft.CodeAnalysis.NetAnalyzers 8.0.0-preview1.23165.1 StyleCop.Analyzers 1.2.0-beta.507
62 lines
1.8 KiB
C#
62 lines
1.8 KiB
C#
// <copyright file="WPFExtensions.cs" company="PlaceholderCompany">
|
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
// </copyright>
|
|
//
|
|
// Copyright (c) 2022-2023 Peter Kirmeier
|
|
|
|
namespace SystemTrayMenu.Utilities
|
|
{
|
|
using System;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
using System.Windows.Threading;
|
|
|
|
internal static class WPFExtensions
|
|
{
|
|
internal static void HandleInvoke(this DispatcherObject instance, Action action)
|
|
{
|
|
if (instance!.CheckAccess())
|
|
{
|
|
action();
|
|
}
|
|
else
|
|
{
|
|
instance.Dispatcher.Invoke(action);
|
|
}
|
|
}
|
|
|
|
internal static T? FindVisualChildOfType<T>(this DependencyObject depObj, int index = 0)
|
|
where T : DependencyObject
|
|
{
|
|
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
|
|
{
|
|
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
|
|
if (child != null)
|
|
{
|
|
if (child is T validChild)
|
|
{
|
|
if (index-- == 0)
|
|
{
|
|
return validChild;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
T? childItem = child.FindVisualChildOfType<T>(index);
|
|
if (childItem != null)
|
|
{
|
|
return childItem;
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
internal static Point GetRelativeChildPositionTo(this Visual parent, Visual? child)
|
|
{
|
|
return child == null ? default : child.TransformToAncestor(parent).Transform(default);
|
|
}
|
|
}
|
|
}
|