mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-10-05 04:24:38 +13:00
de483c874c
Remove use of resx file Resource files are marked as "Resource" instead Resources are loaded via resource dictionaries (either from code behind or XAML directly through binding) Reduce amount of required image conversions Also fix overlay of 50 percent transparency (is now rendered half transparent correct instead of adding "white fog") Remove obsolete image as rendering is done directly in code Also fix rendering of link indicator at correct image position Also remove setting Icons of all Windows (as default is application icon anyway)
75 lines
2.2 KiB
C#
75 lines
2.2 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.Controls;
|
|
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 Window GetParentWindow(this ListView listView)
|
|
{
|
|
var parent = VisualTreeHelper.GetParent(listView);
|
|
|
|
while (parent is not Window)
|
|
{
|
|
parent = VisualTreeHelper.GetParent(parent);
|
|
}
|
|
|
|
return (Window)parent;
|
|
}
|
|
|
|
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 ? new() : child.TransformToAncestor(parent).Transform(new ());
|
|
}
|
|
}
|
|
}
|