私のアプリケーションでは、を使用し、ContentControl
それをカスタムで動的に入力し、UserControl
バインディングを使用しContent
てにバインドしFrameworkElement
ます。[編集:問題を示すためのサンプルコードを追加]
StevenとCharlehの入力の後、問題を再現するために小さなMVVMプロジェクトを作成しました。私のメインウィンドウは次のようになります。
<Window x:Class="ResizeExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:localVM="clr-namespace:ResizeExample.ViewModels"
xmlns:local="clr-namespace:ResizeExample"
Title="ResizeExample"
WindowStartupLocation="CenterScreen"
Height="459"
Width="795">
<Window.Resources>
<localVM:MainWindowViewModel x:Key="Windows1ViewModel" />
</Window.Resources>
<Grid DataContext="{StaticResource Windows1ViewModel}">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Canvas Grid.Row="0">
<Menu DockPanel.Dock="Top"/>
<Label Content="Any Label on the right side" Canvas.Right="0" Canvas.Bottom="0"/>
</Canvas>
<Grid Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ContentControl Name="ControlCanvas" Content="{Binding Path=externalView}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/>
</Grid>
</Grid>
設定externalView
は正常に機能しますが、ウィンドウのサイズが変更されてもサイズは変更されません。これが、ViewModelにどのように実装したかです。
private FrameworkElement _externalView;
public FrameworkElement externalView
{
get { return this._externalView; }
set
{
if (this._externalView != value)
{
this._externalView = value;
RaisePropertyChanged(() => externalView);
}
}
}
public MainWindowViewModel()
{
externalView = new UserControl1();
}
UserControl
には(TabControl
サイズを変更する必要があります)が含まれ、その他はすべてにありますTabControl
。にはTabControl
、いくつかのラベル、テキストボックス、ボタン(サイズを変更しないでください)、およびDataGrid
(サイズを変更する必要があります)が含まれています。TabControl
サイズが設定されておらず、サイズも変更されないため、現時点では完全性が最小化されています。
<UserControl x:Class="ResizeExample.Views.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="411" d:DesignWidth="805" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<TabControl HorizontalAlignment="Left" Name="tabControl1" VerticalAlignment="Top">
<TabItem Header="Tab1" Name="Tab1">
<Grid />
</TabItem>
<TabItem Header="Tab2" Name="Tab2">
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="6,6,0,0" Name="textBox1" VerticalAlignment="Top" Width="357" />
<Label Content="Input some data 1:" Height="28" HorizontalAlignment="Left" Margin="6,29,0,0" Name="label1" VerticalAlignment="Top" />
<Label Content="Input some data 2:" Height="28" HorizontalAlignment="Left" Margin="6,57,0,0" Name="label2" VerticalAlignment="Top" />
<Label Content="Input some data 3:" Height="28" HorizontalAlignment="Left" Margin="6,85,0,0" Name="label3" VerticalAlignment="Top" />
<DataGrid AutoGenerateColumns="False" MinHeight="200" HorizontalAlignment="Left" Margin="6,113,0,0" Name="releaseNotesGrid" VerticalAlignment="Top" MinWidth="780" />
</Grid>
</TabItem>
</TabControl>
</Grid>
</UserControl>
コントロールのサイズが自動的に変更されると思いましたが、これは機能していません。私はWPFとMVVMを初めて使用しますが、基本的なことを見逃した可能性があります。
次のスレッドを見つけた後、サイズを削除して配置を追加しましたが、これでは問題は解決しませんでした。