0

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f765d4c9-1719-4757-b467-2492d87bb4abでも質問

全て、

WPF アプリでスケール変換を実行するスライダーがあります。現在、Height="*" を持つ行内のスクロールビューアー内に要素があり、その後の行に Height="Auto" を持つ別の要素があるという問題が発生しています。

目標は、実行時まで行の高さ (または要素の大きささえも) がわからないことですが、両方の要素を画面に表示し、最初の要素がそれと同じくらいのスペースを占有するようにすることです。缶と一番下の要素は常に表示され、必要なスペースを占有します。

私は次の問題/解決策のステートメントを持っています (これが私の問題を最もよく表していると思います)。要素の 1 つを画面から押し出すのに十分な大きさにする必要があります (うまくいけば、それは理にかなっています)。

Problem statement:
    ScaleTransform is causing top DG to disappear where RowDefinition Height="*"

Solution:
    Set Minimum height on RowDefinition to prevent DG from disappearing.

Problem statement:
    Setting Minimum height on RowDefinitoin causes lower rows to dissapear.

Solution:
    Add scrollviewer encapsulating grid.

Problem statement:
    Since top DG is in RowDefinition Height="*", if there is a lot of data in top DG, bottom DGs cannot be seen without scrolling.

Solution statement:
    ???

これが私の現在のコードです:

<Grid.RowDefinitions>
    <RowDefinition Height="*" MinHeight="120" />
    <RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<GroupBox Grid.Row="0">
    <DataGrid ItemsSource="{Binding Path=SomePathThatCouldHaveLotsOfData}">
        <!--Note that DataGrid implements its own scrollviewer as long as it's not surrounded by another scrollviewer-->
        <!--...-->
    </DataGrid>
</GroupBox>
<GroupBox Grid.Row="1">
    <!--...-->
</GroupBox>

うまくいけば、私の問題と私がやろうとしていることはすべて理にかなっています。これをどのように行うことができるかについてのアイデア (できればきれいな方法で)。役立つ場合は、MVVMを使用しています。

編集:実行時まで最大高さもわからないことを指摘する必要があります(スケール変換を使用するため、最大高はおそらく関係ありません)。

4

1 に答える 1

0

全て、

目標を達成することができましたが、それはちょっとしたハックでした。

基本的に、UserControl/Page/Window の Loaded および SizeChanged イベントをトラップし、これらのイベントを使用して ScrollViewer.ViewPortHeight 値を VM のプロパティに設定する必要がありました。 次に、これから既知の値を差し引いて、自分の最大値として使用するだけでした。 次に、ViewPortHeight に、各 UI 要素が画面に占める割合を掛けて、UI 要素をそれにバインドするだけです。

うまくいけば、これは同じビジネス要件を持つ他の誰かを助けるでしょう.

于 2012-12-01T00:07:26.727 に答える