3

私は典型的なMVVM構造を持っています。メインウィンドウは、いくつかのラベルとビューモデル(ContentControlとしてバインドされている)で構成されています。このビューモデルには、エントリを追加するリストボックスがあります。リストが大きくなると、ビューモデルの高さも大きくなり、アプリケーション全体の高さが大きくなります。残念ながら、サイズは画面の端で止まらず、画面の外に大きくなります。メインウィンドウでさまざまなサイズ制限をすべて試しました。ビューモデルは両方の次元で引き伸ばされています。さらに、リストボックスのスクロールバーを取得しようとしましたが、成功しませんでした(または、リストボックスが表示されているだけで、強制すると有効になりません)。

最大サイズを画面の解像度(フルスクリーン)に制限し、サイズに達したときにリストボックスのスクロールバーを取得するにはどうすればよいですか?

€:さて、ここに私のコードの関連部分があるはずです。1024x768の固定サイズを試しましたが、それでも機能しません。

MainWindow.xaml

<Window x:Class="SWS.MainWindow"
    DataContext="{Binding Main, Source={StaticResource Locator}}"
    Width="1024"
    Height="768"
    MaxWidth="1024"
    MaxHeight="768">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <ContentControl Grid.Row="0" Content="{Binding CurrentViewModel}" />
    </Grid>
</Window>

問題のViewModel

<UserControl x:Class="SWS.Views.ProgramView"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Stretch">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <DockPanel Grid.Row="0">
            <Label Width="65" Content="{x:Static p:Resources.PrV_Number}" />
            <Label Width="75" Content="{x:Static p:Resources.PrV_Weight}" />
            <Label Width="55" Content="{x:Static p:Resources.PrV_Action}" />
            <Label Content=" " />
        </DockPanel>
        <ListBox Grid.Row="1" 
                 VerticalAlignment="Stretch" 
                 ItemsSource="{Binding ParticleCollection}" 
                 ScrollViewer.CanContentScroll="True"
                 ScrollViewer.VerticalScrollBarVisibility="Auto">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <DockPanel>
                        <TextBlock Text="{Binding ID}" Width="53" />
                        <TextBlock Text="{Binding Weight, StringFormat=F4}" Width="65" />
                        <TextBlock Text="{Binding Action}" Width="52" />
                    </DockPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</UserControl>
4

1 に答える 1

4

必要なものを取得しようとするよりも、使用可能なスペースを埋めるために、 WindowforContentControlListBoxinの行の高さを*に設定する必要があります。UserControl

これはうまくいきました:

MainWindow.xaml:

<Window x:Class="SWS.MainWindow"
    DataContext="{Binding Main, Source={StaticResource Locator}}"
    Width="1024"
    Height="768"
    MaxWidth="1024"
    MaxHeight="768">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <ContentControl Grid.Row="0" Content="{Binding CurrentViewModel}" />
    </Grid>
</Window>

およびUserControl

<UserControl x:Class="SWS.Views.ProgramView"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Stretch">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        ...
    </Grid>
</UserControl>

さらにいくつかの方法でこれを行うことができます:

あなたの中でWindowあなたは完全に取り除くことができます<Grid.RowDefinitions>...<Grid.RowDefinitions>。デフォルトの動作はあなたが探しているものです。

複数の行がある場合は、プロパティを指定するか、プロパティをHeight="*"削除するかを選択できます。HeightRowDefinition

<Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>
于 2013-03-25T19:15:23.923 に答える