情境:
我正在使用WinRT / Win8中的商店应用程序。
我有一个ScrollView
,其中包含一个自定义UserControl
子项 - 所有这些都是" main" UserControl
的一部分。< / p>
主要UserControl
(ScrollView
- &gt;子UserControl
)in初始化/导航到 - 即使App宽度不已满-屏幕;根据需要,UserControl
的宽度为ScrollView
。下图:
ScrollView
本身位于Grid
范围内,并且与App窗口的整个宽度保持一致,即使它已根据需要调整大小。
问题:
我遇到的问题是,当我横向调整App窗口的大小时,子UserControl
的宽度与其父ScrollView
的宽度不同。
这会导致ScrollView
拥有水平滚动条 - 这是我不想要的。
我希望将子项的宽度保持在ScrollView
的宽度内,而不使用水平滚动条(如Image 2中所示)。
标记与此相似(为了便于阅读,我已将其删除):
<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>
我已尝试设置(在子自定义UserControl
上):
Width="{Binding Path=ActualWidth, ElementName=scrlTableRows}"
孩子不是设置在ScrollView
的整个宽度开始(这是我需要的),并且没有调整其父级的宽度 - 给我滚动条
Width="{Binding Path=Width, ElementName=scrlTableRows}"
孩子 从父母的全宽开始,但没有调整大小 - 给我滚动条
我还尝试将UserControl
置于Grid
(ScrollView
内),以及许多其他HorizontalAligment
和Width
属性中。
一切都无济于事。
StackOverflow的其他有用的研究员没有其他类似的情况/答案。
显然,我需要垂直滚动条 - 这是显而易见的;在有人问之前。
有人可以给我任何指示吗?
更新:
根据@LovetoCode的要求,以下是自定义UserControl
的Xaml:
<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>
请注意,DataTemplate
资源中的UserControl
资源是基于ViewModel中的对象加载的自定义UserControl
(如my original image 1中所示)。
答案 0 :(得分:0)
所以,非常感谢@LovetoCode,我设法解决了我的问题。尽管如此,仍然试图克服我头部撞到桌子上的2天头痛和瘀伤。
我放弃了ScrollViewer
并使用了我的自定义UserControl
:
<local:TableRowUserControl Grid.Row="1" Grid.ColumnSpan="2"
Margin="66,0,66,40" HorizontalContentAlignment="Stretch" />
然后,正如@LovetoCode建议的那样 - 我使用ListView
代替ItemsControl
。我最诚挚的道歉。我不想第一次使用,因为......
主要问题是使用ListView
的默认样式来悬停和点按效果;这是我不需要的。我试图避免在以前的失败经历中禁用悬停/点击 - 很糟糕。
经过一些谷歌搜索(其他搜索引擎可用),我找到了一个简单的解决方案,很容易做到这一点。
我设法做到了这样:
<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的道具。金星和程序员为你指点:)