0

还在http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f765d4c9-1719-4757-b467-2492d87bb4ab询问

全部,

我有一个在我的 WPF 应用程序中执行缩放变换的滑块。现在我遇到了一个问题,我在滚动查看器内有一个元素,该元素位于具有高度 =“*”的行内,而后续行中的另一个元素具有高度 =“自动”。

目标是直到运行时我们才知道行高(甚至元素有多大),但是我们将两个元素都显示在屏幕上,第一个元素占用与其一样多的空间罐头和底部元素始终可见,占用它需要的任何空间。

我有以下问题/解决方案声明(我认为最能描述我的问题),并且如您所见,当我想实现此目标并且仍然允许在缩放时访问所有 UI 元素时,我被困在做什么大到足以将其中一个元素从屏幕上推出(希望这是有道理的)。

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 回答