1

UIデザインの問題が発生しています。これは、アプリウィンドウのコンテンツをウィンドウの最小サイズに合わせて縮小したいものです。

以下のXAMLを使用すると、ウィンドウが狭すぎると、コンテンツが縮小されて収まりません。完全。私の問題は、ウィンドウが短すぎると、次のようにコンテンツが下部から外れることです。

<ItemsControl ItemsSource="{Binding GroupStatsDisplayList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Background="Red" Margin="5" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Viewbox Margin="4" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"  Width="Auto" Height="Auto" >
                <ListBox>
                    <StackPanel Orientation="Horizontal" Margin="5" Background="Blue">
                        <Label Content="{Binding GroupID}" FontWeight="Bold"/>
                        <Label Content="{Binding GroupName}" Width="100" FontWeight="Bold" />
                        <Label Content="{Binding CallsInQueue}" FontWeight="Bold" />
                        <Label Content="{Binding TSF}" FontWeight="Bold" />
                    </StackPanel>
                </ListBox>

            </Viewbox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

ItemsControlがデフォルトのitemspanelとしてStackPanelを使用し、StackPanelが私が見ているように動作するという同様の質問への回答を読みました。私のような問題を克服するためにグリッドが推奨されています。

そこで、ItemsControlにグリッドを使用するように指示してみました。

<ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid Background="Red" Margin="5" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

どちらの方向にも拘束されるとコンテンツのサイズが変更されるため、より適切です。さらに悪いことに、コレクションの最後のアイテムで更新されるViewBox-> ListBox要素が1つしかないようです(アプリの起動時に、コレクションサイクルの3つのアイテムが表示されます)。コレクション内のすべてのアイテムが画面に表示されるわけではなく、最後のアイテムのみが表示されます。

DockPanelが私を救うことができることも読みました...

<ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <DockPanel Background="Red" Margin="5" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

その時、物事はおかしくなり、私はこの質問を書くことにしました。これでコレクション内のすべてのアイテムが表示されますが、ウィンドウを水平方向に展開すると1つずつ表示され、既存のアイテムがウィンドウの垂直方向に拡大すると、新しいアイテムが1つずつ表示されます。

最初の画像のように見えるが、ウィンドウの最小寸法に収まるように縮小するレイアウトを取得するにはどうすればよいですか?

4

3 に答える 3

2

StackPanelにハードコードされたアイテムが1つしかないのに、DataTemplateにListBoxがあるのはなぜですか?それを明確にするために:ItemTemplateは、1つのアイテムをアイテムコレクションにどのように表示するかを定義します。たとえば、左側にアルバムカバー、その横にアーティスト名、下部に星評価を表示するItemTemplateを作成できます。グリッドをItemsPanelとして使用しないでください。そのためには、動的なグリッド/列定義コレクションを提供する必要があります。ViewBoxを使用することが私の最善のアドバイスです。ただし、ItemTemplateにはありません。これは、itemscontrol全体の周りのビューボックスである1つの子のみのサイズになります。

于 2012-03-17T13:51:26.910 に答える
1

これは、dowhileforからの回答に基づいて使用したXAMLです。

    <Viewbox Margin="3" >
    <ItemsControl ItemsSource="{Binding GroupStatsDisplayList}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="1" Background="LightGreen">
                    <Label Content="{Binding GroupID}" FontWeight="Bold"/>
                    <Label Content="{Binding GroupName}" Width="100" FontWeight="Bold" />
                    <Label Content="{Binding CallsInQueue}" FontWeight="Bold" />
                    <Label Content="{Binding TSF}" FontWeight="Bold" />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Viewbox>
于 2012-03-19T11:06:33.590 に答える
0

私はしばらくの間WPFを実行していません。おそらく、それはあまり良い方法とは見なされていませんが、GUI全体でscaletransformを使用できますか?

私はいつも彼らと遊ぶのが好きでした。

于 2012-03-16T12:11:36.383 に答える