Skip to content

Commit 2c6afd7

Browse files
committed
bugfix Dirkster99#73 (fixed dock sizes) use code from xceedsoftware/wpftoolkit#1195
1 parent a709b9a commit 2c6afd7

File tree

5 files changed

+165
-126
lines changed

5 files changed

+165
-126
lines changed

source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorablePaneGroupControl.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ protected override void OnFixChildrenDockLengths()
4848
for( int i = 0; i < _model.Children.Count; i++ )
4949
{
5050
var childModel = _model.Children[ i ] as ILayoutPositionableElement;
51-
if( !childModel.DockWidth.IsStar )
51+
if( childModel.ForceFixedDockSize && !childModel.DockWidth.IsStar )
5252
{
5353
childModel.DockWidth = new GridLength( 1.0, GridUnitType.Star );
5454
}
@@ -59,7 +59,7 @@ protected override void OnFixChildrenDockLengths()
5959
for( int i = 0; i < _model.Children.Count; i++ )
6060
{
6161
var childModel = _model.Children[ i ] as ILayoutPositionableElement;
62-
if( !childModel.DockHeight.IsStar )
62+
if( childModel.ForceFixedDockSize && !childModel.DockHeight.IsStar )
6363
{
6464
childModel.DockHeight = new GridLength( 1.0, GridUnitType.Star );
6565
}

source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentPaneGroupControl.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ protected override void OnFixChildrenDockLengths()
4848
for( int i = 0; i < _model.Children.Count; i++ )
4949
{
5050
var childModel = _model.Children[ i ] as ILayoutPositionableElement;
51-
if( !childModel.DockWidth.IsStar )
51+
if( childModel.ForceFixedDockSize && !childModel.DockWidth.IsStar )
5252
{
5353
childModel.DockWidth = new GridLength( 1.0, GridUnitType.Star );
5454
}
@@ -59,7 +59,7 @@ protected override void OnFixChildrenDockLengths()
5959
for( int i = 0; i < _model.Children.Count; i++ )
6060
{
6161
var childModel = _model.Children[ i ] as ILayoutPositionableElement;
62-
if( !childModel.DockHeight.IsStar )
62+
if( childModel.ForceFixedDockSize && !childModel.DockHeight.IsStar )
6363
{
6464
childModel.DockHeight = new GridLength( 1.0, GridUnitType.Star );
6565
}

source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutPanelControl.cs

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,27 @@ protected override void OnFixChildrenDockLengths()
5959
var childContainerModel = _model.Children[ i ] as ILayoutContainer;
6060
var childPositionableModel = _model.Children[ i ] as ILayoutPositionableElement;
6161

62-
if( childContainerModel != null &&
63-
( childContainerModel.IsOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>() ||
64-
childContainerModel.ContainsChildOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>() ) )
62+
if (childPositionableModel.ForceFixedDockSize)
6563
{
66-
childPositionableModel.DockWidth = new GridLength( 1.0, GridUnitType.Star );
67-
}
68-
else if( childPositionableModel != null && childPositionableModel.DockWidth.IsStar )
69-
{
70-
var childPositionableModelWidthActualSize = childPositionableModel as ILayoutPositionableElementWithActualSize;
71-
var childDockMinWidth = childPositionableModel.CalculatedDockMinWidth();
72-
var widthToSet = Math.Max( childPositionableModelWidthActualSize.ActualWidth, childDockMinWidth );
73-
74-
widthToSet = Math.Min( widthToSet, ActualWidth / 2.0 );
75-
widthToSet = Math.Max( widthToSet, childDockMinWidth );
76-
77-
childPositionableModel.DockWidth = new GridLength(
78-
widthToSet,
79-
GridUnitType.Pixel );
64+
if (childContainerModel != null &&
65+
(childContainerModel.IsOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>() ||
66+
childContainerModel.ContainsChildOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>()))
67+
{
68+
childPositionableModel.DockWidth = new GridLength(1.0, GridUnitType.Star);
69+
}
70+
else if (childPositionableModel != null && childPositionableModel.DockWidth.IsStar)
71+
{
72+
var childPositionableModelWidthActualSize = childPositionableModel as ILayoutPositionableElementWithActualSize;
73+
var childDockMinWidth = childPositionableModel.CalculatedDockMinWidth();
74+
var widthToSet = Math.Max(childPositionableModelWidthActualSize.ActualWidth, childDockMinWidth);
75+
76+
widthToSet = Math.Min(widthToSet, ActualWidth / 2.0);
77+
widthToSet = Math.Max(widthToSet, childDockMinWidth);
78+
79+
childPositionableModel.DockWidth = new GridLength(
80+
widthToSet,
81+
GridUnitType.Pixel);
82+
}
8083
}
8184
}
8285
}
@@ -85,7 +88,7 @@ protected override void OnFixChildrenDockLengths()
8588
for( int i = 0; i < _model.Children.Count; i++ )
8689
{
8790
var childPositionableModel = _model.Children[ i ] as ILayoutPositionableElement;
88-
if( !childPositionableModel.DockWidth.IsStar )
91+
if( childPositionableModel.ForceFixedDockSize && !childPositionableModel.DockWidth.IsStar )
8992
{
9093
childPositionableModel.DockWidth = new GridLength( 1.0, GridUnitType.Star );
9194
}
@@ -101,21 +104,24 @@ protected override void OnFixChildrenDockLengths()
101104
var childContainerModel = _model.Children[ i ] as ILayoutContainer;
102105
var childPositionableModel = _model.Children[ i ] as ILayoutPositionableElement;
103106

104-
if( childContainerModel != null &&
105-
( childContainerModel.IsOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>() ||
106-
childContainerModel.ContainsChildOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>() ) )
107+
if (childPositionableModel.ForceFixedDockSize)
107108
{
108-
childPositionableModel.DockHeight = new GridLength( 1.0, GridUnitType.Star );
109-
}
110-
else if( childPositionableModel != null && childPositionableModel.DockHeight.IsStar )
111-
{
112-
var childPositionableModelWidthActualSize = childPositionableModel as ILayoutPositionableElementWithActualSize;
113-
var childDockMinHeight = childPositionableModel.CalculatedDockMinHeight();
114-
var heightToSet = Math.Max( childPositionableModelWidthActualSize.ActualHeight, childDockMinHeight );
115-
heightToSet = Math.Min( heightToSet, ActualHeight / 2.0 );
116-
heightToSet = Math.Max( heightToSet, childDockMinHeight );
117-
118-
childPositionableModel.DockHeight = new GridLength( heightToSet, GridUnitType.Pixel );
109+
if (childContainerModel != null &&
110+
(childContainerModel.IsOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>() ||
111+
childContainerModel.ContainsChildOfType<LayoutDocumentPane, LayoutDocumentPaneGroup>()))
112+
{
113+
childPositionableModel.DockHeight = new GridLength(1.0, GridUnitType.Star);
114+
}
115+
else if (childPositionableModel != null && childPositionableModel.DockHeight.IsStar)
116+
{
117+
var childPositionableModelWidthActualSize = childPositionableModel as ILayoutPositionableElementWithActualSize;
118+
var childDockMinHeight = childPositionableModel.CalculatedDockMinHeight();
119+
var heightToSet = Math.Max(childPositionableModelWidthActualSize.ActualHeight, childDockMinHeight);
120+
heightToSet = Math.Min(heightToSet, ActualHeight / 2.0);
121+
heightToSet = Math.Max(heightToSet, childDockMinHeight);
122+
123+
childPositionableModel.DockHeight = new GridLength(heightToSet, GridUnitType.Pixel);
124+
}
119125
}
120126
}
121127
}
@@ -124,7 +130,7 @@ protected override void OnFixChildrenDockLengths()
124130
for( int i = 0; i < _model.Children.Count; i++ )
125131
{
126132
var childPositionableModel = _model.Children[ i ] as ILayoutPositionableElement;
127-
if( !childPositionableModel.DockHeight.IsStar )
133+
if( childPositionableModel.ForceFixedDockSize && !childPositionableModel.DockHeight.IsStar )
128134
{
129135
childPositionableModel.DockHeight = new GridLength( 1.0, GridUnitType.Star );
130136
}

source/Components/Xceed.Wpf.AvalonDock/Layout/ILayoutPositionableElement.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ bool IsVisible
7171
{
7272
get;
7373
}
74+
75+
bool ForceFixedDockSize
76+
{
77+
get;
78+
}
7479
}
7580

7681

0 commit comments

Comments
 (0)