この質問に関してWPFルームでチャットしているので、これは一見簡単なことと複雑な問題でした。
mdiChildに幅/高さを設定すると、サイズ変更機能が失われます。だから私は私たちのチャットに従ってこの問題を解決したように見える修正の要点を投稿しました
そのため、サイズをバインドするために、通常のバインド(テストプロジェクトからのこのコピーペースト)を使用しました。
<Window x:Class="TestApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:MDI="clr-namespace:WPF.MDI;assembly=WPF.MDI" xmlns:TestApplication="clr-namespace:TestApplication"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="MainWindow">
<MDI:MdiContainer Name="mainContainer">
<MDI:MdiChild x:Name="mdiChild" MaximizeBox="False" MinimizeBox="False" Resizable="True" ShowIcon="False" Width="{Binding Width, ElementName=childElement}" Height="{Binding Height, ElementName=childElement}">
<TestApplication:DatabaseTable x:Name="childElement"/>
</MDI:MdiChild>
</MDI:MdiContainer>
</Window>
これにより、主な幅と高さの問題が解決されます。
このコードは、WPF.MDIライブラリのMdiChild.csチェンジセット81799サイズ変更ハンドラーソースを置き換える必要があります(そこにある既存の関連コードをこれに置き換えることができます)。
/// <summary>
/// Handles the DragDelta event of the ResizeLeft control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Windows.Controls.Primitives.DragDeltaEventArgs"/> instance containing the event data.</param>
private void ResizeLeft_DragDelta(object sender, DragDeltaEventArgs e)
{
if (ActualWidth - e.HorizontalChange < MinWidth)
return;
double newLeft = e.HorizontalChange;
if (Position.X + newLeft < 0)
newLeft = 0 - Position.X;
Width = ActualWidth - newLeft;
Position = new Point(Position.X + newLeft, Position.Y);
if (sender != null)
Container.InvalidateSize();
}
/// <summary>
/// Handles the DragDelta event of the ResizeTop control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Windows.Controls.Primitives.DragDeltaEventArgs"/> instance containing the event data.</param>
private void ResizeTop_DragDelta(object sender, DragDeltaEventArgs e)
{
if (ActualHeight - e.VerticalChange < MinHeight)
return;
double newTop = e.VerticalChange;
if (Position.Y + newTop < 0)
newTop = 0 - Position.Y;
Height = ActualHeight - newTop;
Position = new Point(Position.X, Position.Y + newTop);
if (sender != null)
Container.InvalidateSize();
}
/// <summary>
/// Handles the DragDelta event of the ResizeRight control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Windows.Controls.Primitives.DragDeltaEventArgs"/> instance containing the event data.</param>
private void ResizeRight_DragDelta(object sender, DragDeltaEventArgs e)
{
if (ActualWidth + e.HorizontalChange < MinWidth)
return;
Width = ActualWidth + e.HorizontalChange;
if (sender != null)
Container.InvalidateSize();
}
/// <summary>
/// Handles the DragDelta event of the ResizeBottom control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Windows.Controls.Primitives.DragDeltaEventArgs"/> instance containing the event data.</param>
private void ResizeBottom_DragDelta(object sender, DragDeltaEventArgs e)
{
if (ActualHeight + e.VerticalChange < MinHeight)
return;
Height = ActualHeight + e.VerticalChange;
if (sender != null)
Container.InvalidateSize();
}