16

が存在するグリッド行の高さが にScrollViewer設定されているAuto場合、 の実際のサイズがScrollViewer表示されている高さよりも大きくなる可能性があるため、垂直スクロール バーが有効にならないことを学びました。したがって、スクロールバーを機能させるには、高さを固定数または星の高さに設定する必要があります

ただし、2 つの異なるビューを 2 つのグリッド行に配置し、これら 2 つのビューを切り替えるトグル ボタンを用意する必要があります。したがって、2 つの行を定義し、両方の高さを に設定しましAutoた。そして、各行のビューの可視性を ViewModel のブール値プロパティにバインドします (1 つは から に変換されTrueVisibleもう1 つは からTrueに変換されCollapsedます。アイデアは、1 つのビューの可視性が の場合Collapsed、グリッド行/ビューの高さが変更されることです)。自動的に 0 になります。

ビューの表示/非表示は正常に機能しています。ただし、あるビューには がありますが、ScrollViewer前述のように、行の高さが に設定されている場合は機能しませんAutoScrollViewer自動的に動作しながら、そのような要件を満たす方法を誰か教えてもらえますか? コードビハインドで高さを設定できると思います。しかし、私はMVVMを使用しているため、追加の通信/通知が必要になります. それを行うためのより簡単な方法はありますか?

4

5 に答える 5

16

可能であれば、高さを から に変更しAutoます*

例:

    <Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="200" Width="525">
    <StackPanel Orientation="Horizontal"  Background="LightGray">

        <Grid Width="100">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <ScrollViewer VerticalScrollBarVisibility="Auto" x:Name="_scroll1">
                <Border Height="300" Background="Red" />
            </ScrollViewer>
            <TextBlock Text="{Binding ElementName=_scroll1, Path=ActualHeight}" Grid.Row="1"/>
        </Grid>

        <Grid Width="100">
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
                <ScrollViewer VerticalScrollBarVisibility="Auto" x:Name="_scroll2">
                    <Border Height="300" Background="Green" />
                </ScrollViewer>
            <TextBlock Text="{Binding ElementName=_scroll2, Path=ActualHeight}" Grid.Row="1"/>
        </Grid>
    </StackPanel>
</Window>
于 2013-10-14T08:43:03.090 に答える
0

ScrollViewer に固定の高さを設定できますが、行の最初の子が ScrollViewer になり、行の高さが自動であるため、グリッドの 2 行目もその高さになることを考慮する必要があります。または、ScrollViewer の高さをにバインドします。レイアウト内の別のコントロール。レイアウトがどのように似ているかわかりません。

最後に、どちらも気に入らない場合は、swiszcz が提案したように行の高さを * に設定するか、wpf をハックして、すべてのパラレル ユニバースなどで可能なすべてをレイアウトできる独自のカスタム パネルを作成します。:)

于 2013-10-14T08:46:44.130 に答える