|
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Interactivity;
namespace AutoDiagrammer
{
public class CollapseAction : TriggerAction<Button>
{
public Dock Direction { get; set; }
protected override void Invoke(object parameter)
{
// First find the nearest splitter
var splitter = FindVisual<GridSplitter>(AssociatedObject);
if (splitter != null)
{
var grid = FindVisual<Grid>(splitter); // Find nearest Grid
if (grid != null)
{
ApplyDock(grid);
}
}
}
private void ApplyDock(Grid grid)
{
var cDef1 = grid.ColumnDefinitions.FirstOrDefault();
var cDef2 = grid.ColumnDefinitions.LastOrDefault();
var rDef1 = grid.RowDefinitions.FirstOrDefault();
var rDef2 = grid.RowDefinitions.LastOrDefault();
switch (Direction)
{
case Dock.Left:
cDef1.Width = new GridLength(0);
cDef2.Width = new GridLength(1, GridUnitType.Star);
break;
case Dock.Right:
cDef2.Width = new GridLength(0);
cDef1.Width = new GridLength(1, GridUnitType.Star);
break;
case Dock.Top:
rDef1.Height = new GridLength(0);
rDef2.Height = new GridLength(1, GridUnitType.Star);
break;
case Dock.Bottom:
rDef2.Height = new GridLength(0);
rDef1.Height = new GridLength(1, GridUnitType.Star);
break;
}
}
private T FindVisual<T>(FrameworkElement relElt) where T : FrameworkElement
{
var parent = VisualTreeHelper.GetParent(relElt);
while (parent != null && !(parent is T))
{
parent = VisualTreeHelper.GetParent(parent);
}
return parent as T;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I currently hold the following qualifications (amongst others, I also studied Music Technology and Electronics, for my sins)
- MSc (Passed with distinctions), in Information Technology for E-Commerce
- BSc Hons (1st class) in Computer Science & Artificial Intelligence
Both of these at Sussex University UK.
Award(s)
I am lucky enough to have won a few awards for Zany Crazy code articles over the years
- Microsoft C# MVP 2016
- Codeproject MVP 2016
- Microsoft C# MVP 2015
- Codeproject MVP 2015
- Microsoft C# MVP 2014
- Codeproject MVP 2014
- Microsoft C# MVP 2013
- Codeproject MVP 2013
- Microsoft C# MVP 2012
- Codeproject MVP 2012
- Microsoft C# MVP 2011
- Codeproject MVP 2011
- Microsoft C# MVP 2010
- Codeproject MVP 2010
- Microsoft C# MVP 2009
- Codeproject MVP 2009
- Microsoft C# MVP 2008
- Codeproject MVP 2008
- And numerous codeproject awards which you can see over at my blog