96 lines
3.5 KiB
C#
96 lines
3.5 KiB
C#
using System;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace HandyControl.Controls;
|
|
|
|
public class GridAttach
|
|
{
|
|
public static readonly DependencyProperty NameProperty = DependencyProperty.RegisterAttached(
|
|
"Name", typeof(string), typeof(GridAttach), new PropertyMetadata(default(string)));
|
|
|
|
public static void SetName(DependencyObject element, string value)
|
|
=> element.SetValue(NameProperty, value);
|
|
|
|
public static string GetName(DependencyObject element)
|
|
=> (string) element.GetValue(NameProperty);
|
|
|
|
public static readonly DependencyProperty RowNameProperty = DependencyProperty.RegisterAttached(
|
|
"RowName", typeof(string), typeof(GridAttach), new PropertyMetadata(default(string), OnRowNameChanged));
|
|
|
|
private static void OnRowNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (d is FrameworkElement frameworkElement)
|
|
{
|
|
if (e.NewValue is string rowName)
|
|
{
|
|
if (string.IsNullOrEmpty(rowName))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (frameworkElement.Parent is Grid grid)
|
|
{
|
|
for (var i = 0; i < grid.RowDefinitions.Count; i++)
|
|
{
|
|
var gridRowDefinition = grid.RowDefinitions[i];
|
|
var gridRowName = GetName(gridRowDefinition);
|
|
|
|
if (!string.IsNullOrEmpty(gridRowName) &&
|
|
gridRowName.Equals(rowName, StringComparison.Ordinal))
|
|
{
|
|
Grid.SetRow(frameworkElement, i);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void SetRowName(DependencyObject element, string value)
|
|
=> element.SetValue(RowNameProperty, value);
|
|
|
|
public static string GetRowName(DependencyObject element)
|
|
=> (string) element.GetValue(RowNameProperty);
|
|
|
|
public static readonly DependencyProperty ColumnNameProperty = DependencyProperty.RegisterAttached(
|
|
"ColumnName", typeof(string), typeof(GridAttach), new PropertyMetadata(default(string), OnColumnNameChanged));
|
|
|
|
private static void OnColumnNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (d is FrameworkElement frameworkElement)
|
|
{
|
|
if (e.NewValue is string columnName)
|
|
{
|
|
if (string.IsNullOrEmpty(columnName))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (frameworkElement.Parent is Grid grid)
|
|
{
|
|
for (var i = 0; i < grid.ColumnDefinitions.Count; i++)
|
|
{
|
|
var gridColumnDefinition = grid.ColumnDefinitions[i];
|
|
var gridColumnName = GetName(gridColumnDefinition);
|
|
|
|
if (!string.IsNullOrEmpty(gridColumnName) &&
|
|
gridColumnName.Equals(columnName, StringComparison.Ordinal))
|
|
{
|
|
Grid.SetColumn(frameworkElement, i);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void SetColumnName(DependencyObject element, string value)
|
|
=> element.SetValue(ColumnNameProperty, value);
|
|
|
|
public static string GetColumnName(DependencyObject element)
|
|
=> (string) element.GetValue(ColumnNameProperty);
|
|
}
|