ScrollView 的 Child 无法通过 Window Resize WinRT 正确调整大小

ScrollView's Child Not Resizing Properly With Window Resize WinRT

场景:
我正在 WinRT/Win8.

开发商店应用程序

我有一个 ScrollView,里面有一个自定义的 UserControl child - 都是一个 "main" UserControl.

当主要 UserControl(与 ScrollView -> child UserControl)在 Initialized/navigated 时 - 即使应用宽度 不是full-screen; UserControl 处于 ScrollView 的全宽 - 根据需要。下图:

ScrollView 本身位于 Grid 内,并与应用程序 window 的整个宽度保持一致,即使根据需要调整大小也是如此。

问题:
我遇到的问题是,当我水平调整 App window 大小时,child UserControl 的宽度与其 parent ScrollView 的宽度不同s.

这会导致 ScrollView 出现水平滚动条——这是我不想要的。

我想将 child 的宽度限制在 ScrollView 的宽度内,没有水平滚动条(如 Image 2)。

Markup 与此类似(为了便于阅读,我已将其精简):

<Grid>
    <!-- Some row/column definitions in here -->
    ...
    <!-- A header TextBlock -->
    ...
    <ScrollViewer x:Name="scrlTableRows" Grid.ColumnSpan="3" Grid.Row="1" 
                  HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
                  Padding="66,0,66,40" ZoomMode="Disabled">
        <local:MyCustomUserControl Margin="0,10,0,10" HorizontalAlignment="Stretch" />
    </ScrollViewer>
    ...
    <!-- Just a button here-->
</Grid>

我已经尝试过设置(在child自定义UserControl):

一切都无济于事。

Whosebug 的其他有帮助的同事没有其他类似的 situations/answers 工作。

显然,我需要垂直滚动条——这是显而易见的;在任何人问之前。

请问有人能给我指点吗?

更新:

这是自定义 UserControl 的 Xaml,应 @LovetoCode 的要求:

<UserControl *usual user control declaritive stuff in here*>
    <UserControl.Resources>
        <CollectionViewSource x:Key="FieldViewModelsSource" Source="{Binding ItemToEdit.FieldViewModels}"/>

        <datatemplateselectors:FieldViewModelDataTemplateSelector 
            x:Key="FieldViewModelDataTemplateSelector"
            AudioFieldTemplate="{StaticResource TableRowAudioFieldDataTemplate}"
            CheckboxFieldTemplate="{StaticResource TableRowCheckboxFieldDataTemplate}"
            DatasetFieldTemplate="{StaticResource TableRowDatasetFieldDataTemplate}"
            DateFieldTemplate="{StaticResource TableRowDateFieldDataTemplate}"
            DateTimeFieldTemplate="{StaticResource TableRowDateTimeFieldDataTemplate}"
            DropdownFieldTemplate="{StaticResource TableRowDropdownFieldDataTemplate}"
            FileFieldTemplate="{StaticResource TableRowFileFieldDataTemplate}"
            GpsFieldTemplate="{StaticResource TableRowGpsFieldDataTemplate}"
            GridFieldTemplate="{StaticResource TableRowGridFieldDataTemplate}"
            ImageFieldTemplate="{StaticResource TableRowImageFieldDataTemplate}"
            LabelFieldTemplate="{StaticResource TableRowLabelFieldDataTemplate}"
            MultichoiceCheckboxFieldTemplate="{StaticResource TableRowMultichoiceCheckboxFieldDataTemplate}"
            RadioFieldTemplate="{StaticResource TableRowRadioFieldDataTemplate}"
            RangeSliderFieldTemplate="{StaticResource TableRowRangeSliderFieldDataTemplate}"
            SignatureFieldTemplate="{StaticResource TableRowSignatureFieldDataTemplate}"
            SplitterFieldTemplate="{StaticResource TableRowSplitterFieldDataTemplate}"
            TextFieldTemplate="{StaticResource TableRowTextFieldDataTemplate}"
            TextareaFieldTemplate="{StaticResource TableRowTextareaFieldDataTemplate}"
            TimeFieldTemplate="{StaticResource TableRowTimeFieldDataTemplate}"
            VideoFieldTemplate="{StaticResource TableRowVideoFieldDataTemplate}"/>
    </UserControl.Resources>

    <Grid>
        <ItemsControl ItemsSource="{Binding Source={StaticResource FieldViewModelsSource}}"
                      ItemTemplateSelector="{StaticResource FieldViewModelDataTemplateSelector}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Margin="10,0,10,0" Orientation="Vertical" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Grid>
</UserControl>

请注意,UserControl 资源中的 DataTemplate 资源是基于 ViewModel 中的 objects 加载的自定义 UserControl 资源(如 my original image 1).

非常感谢@LovetoCode,我设法解决了我的问题。不过,我仍在努力克服因头撞桌子而引起的 2 天头痛和瘀伤。

我放弃了 ScrollViewer,只使用了我的习惯 UserControl:

<local:TableRowUserControl Grid.Row="1" Grid.ColumnSpan="2"
                           Margin="66,0,66,40" HorizontalContentAlignment="Stretch" />

然后,正如@LovetoCode 所建议的那样——我使用了 ListView 而不是 ItemsControl。我最诚挚的歉意。我不想第一次使用一个因为...

主要问题是 ListView 的默认样式具有悬停和点击效果;我不需要。我试图避免从以前的失败经验中禁用 hover/tap - 悲惨地。

经过一些谷歌搜索(其他搜索引擎可用)后,我找到了一个简单的解决方案来轻松完成此操作。

我设法做到了:

<ListView x:Name="lstFieldViewModels" ItemsSource="{Binding Source={StaticResource FieldViewModelsSource}}" SelectionMode="None"
                      ItemTemplateSelector="{StaticResource FieldViewModelDataTemplateSelector}" IsSwipeEnabled="False">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="Background" Value="Transparent" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <ContentPresenter />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Margin="10,0,10,0" Orientation="Vertical" />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

再次感谢@LovetoCode。金星和程序员积分给你:)