Windows 8 ScrollViewer 打破 TextBlock Wrap

Posted

技术标签:

【中文标题】Windows 8 ScrollViewer 打破 TextBlock Wrap【英文标题】:Windows 8 ScrollViewer breaks TextBlock Wrap 【发布时间】:2014-04-10 14:29:39 【问题描述】:

我有一个 ListView,其中包含一个带有几个文本框的网格,并且列的宽度绑定到页面的 ActualWidth 属性。

问题是垂直滚动条放置在列表中最大的项目之后(没有对齐到页面的右侧)。如果我在 ListView 之前添加一个 ScrollViewer,则垂直滚动条位于我想要的位置(捕捉到页面的右侧),但是文本不再换行(跨越多行以适应屏幕上的所有文本) 但它一直在窗口范围之外。

这是具有文本换行功能的 xaml:

<Grid x:Name="detailsGrid" Margin="120,0,10,10" Grid.Row="1">
    <tools:customListView ItemsSource="Binding Items, ElementName=pageRoot" SelectionMode="None" IsItemClickEnabled="True" Margin="5,5,0,5" HorizontalAlignment="Left" VerticalAlignment="Top" ItemClick="list_ItemClick">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Height" Value="Auto" />
                <Setter Property="Width" Value="Auto" />
                <Setter Property="MinWidth" Value="270"/>
                <Setter Property="HorizontalAlignment" Value="Left" />
                <Setter Property="VerticalAlignment" Value="Stretch" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border BorderThickness="Binding BorderThickness" BorderBrush="#cccccc" Margin="Binding BorderMargin">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Binding ActualWidth, ElementName=pageRoot"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Image Width="32" MaxWidth="32" Height="32" MaxHeight="32" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="Binding Margin" Source="Binding ImageSource" Stretch="Fill" Visibility="Binding ImageVisibility" Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" />
                        <TextBlock Grid.Column="1" Grid.Row="0" Text="Binding Title" TextWrapping="Wrap" FontWeight="Binding FontWeight" Style="Binding StatusStyle" />
                        <TextBlock Grid.Column="1" Grid.Row="1" Text="Binding Details" TextWrapping="Wrap" Foreground="StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush" Visibility="Binding DetailsVisibility"/>
                    </Grid>
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </tools:customListView>
</Grid>

这是具有正确对齐的滚动条但文本换行损坏的 xaml:https://gist.github.com/paulcsiki/10388526

我必须做什么才能在屏幕右侧获得滚动条并让文本换行正常工作?

【问题讨论】:

【参考方案1】:

将此添加到您的ListView

ScrollViewer.VerticalScrollBarVisibility="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"

【讨论】:

我将它们添加到 ListView 中,但 TextBlocks 在 ScrollViewer 中仍然没有换行。 你能把ActualWidth改成Width 这里是当前代码:gist.github.com/paulcsiki/10388526/…。包装功能仍然无法正常工作。请记住,如果我删除滚动查看器,它会起作用。 我没有你的CustomListView 和一个快速的ViewModel 来绑定它。如果你删除ScrollViewer,你能给我看一张照片吗?

以上是关于Windows 8 ScrollViewer 打破 TextBlock Wrap的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 8 滚动文本框的内容

ScrollViewer中的Silverlight Canvas大小调整

如何使 WPF ScrollViewer 中键单击滚动?

如何增加 WPF ScrollViewer 中的滚动条宽度?

允许在内部水平滚动 ScrollViewer 内垂直滚动外部 ScrollViewer

打破 ReadFile() 阻塞 - 命名管道 (Windows API)