1

私のアプリケーションでは、を使用し、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を初めて使用しますが、基本的なことを見逃した可能性があります。

次のスレッドを見つけた後、サイズを削除して配置を追加しましたが、これでは問題は解決しませんでした。

4

3 に答える 3

4

少しテストして解決しました。問題は、ストレッチで機能しないアライメントを持っていたとでしたTabControl。これは今では私のものであり、私にとっては問題なく機能します。DataGridUserControlUserControl1

<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" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" HorizontalContentAlignment="Stretch"  VerticalContentAlignment="Stretch">
<Grid HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" >
    <TabControl HorizontalAlignment="Stretch" Name="tabControl1" VerticalAlignment="Stretch">
        <TabItem Header="Tab1" Name="Tab1">
            <Grid />
        </TabItem>
        <TabItem Header="Tab2" Name="Tab2" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
            <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" Margin="6,113,0,0" Name="releaseNotesGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="780" />
            </Grid>
        </TabItem>
    </TabControl>
</Grid>
</UserControl>

私を正しい方向に向けてくれたStevenとCharlehに感謝します。

于 2012-12-05T09:00:45.313 に答える
2

ContentControl.HorizontalContentAlignmentスティーブンスの答えに加えて、デフォルトのように設定ContentControl.VerticalContentAlignmentする必要があるかもしれません(私が覚えている限り)StretchContentControlLeftTop

そうしないContentControlと、親コンテナがいっぱいになっても、コンテンツはいっぱいになりません。

編集:これがデフォルト値を表示するためのデフォルトテンプレートContentControlです...

<Style TargetType="ContentControl">
  <Setter Property="Foreground" Value="#FF000000"/>
  <Setter Property="HorizontalContentAlignment" Value="Left"/>
  <Setter Property="VerticalContentAlignment" Value="Top"/>
  <Setter Property="Template">
      <Setter.Value>
          <ControlTemplate TargetType="ContentControl">
              <ContentPresenter
                  Content="{TemplateBinding Content}"
                  ContentTemplate="{TemplateBinding ContentTemplate}"
                  Cursor="{TemplateBinding Cursor}"
                  Margin="{TemplateBinding Padding}"
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
          </ControlTemplate>
      </Setter.Value>
  </Setter>

于 2012-12-04T16:21:58.393 に答える
1

Canvas子コンテンツのサイズをコンテナサイズに自動的に変更しません。

Grid代わりにegを使用してみてください。

于 2012-12-04T16:18:04.317 に答える