WPF ScrollViewer方面

时间:2013-03-15 10:45:57

标签: c# wpf xaml scrollview

我有一个Expander嵌套ScrollViewer如下图所示:

代码(简化版

<Expander.Content>
    <ScrollViewer VerticalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Vertical">
            <TextBox FontSize="16"
                    BorderThickness="0"
                    IsReadOnly="True"
                    Background="Transparent"
                    Foreground="MidnightBlue"
                    TextWrapping="Wrap"
                    Text="{Binding LoggingMessage, Mode=OneWay}">
                </TextBox>
            /StackPanel>
         </ScrollViewer>
    </Expander.Content>
</Expander>

我需要更改ScrollViewer的侧面,因此它显示在左侧。

最简单的解决办法是什么?

3 个答案:

答案 0 :(得分:3)

您可以自定义滚动查看器的模板以更改滚动条的位置(以及其他内容)。模板自定义的MSDN示例实际上显示了如何将垂直滚动条移动到左侧。

http://msdn.microsoft.com/en-gb/library/aa970847(v=vs.85).aspx

以下是为方便起见的代码:

<Style x:Key="LeftScrollViewer" TargetType="{x:Type ScrollViewer}">
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <ScrollContentPresenter Grid.Column="1"/>

                    <ScrollBar Name="PART_VerticalScrollBar"
                        Value="{TemplateBinding VerticalOffset}"
                        Maximum="{TemplateBinding ScrollableHeight}"
                        ViewportSize="{TemplateBinding ViewportHeight}"
                        Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
                    <ScrollBar Name="PART_HorizontalScrollBar"
                        Orientation="Horizontal"
                        Grid.Row="1"
                        Grid.Column="1"
                        Value="{TemplateBinding HorizontalOffset}"
                        Maximum="{TemplateBinding ScrollableWidth}"
                        ViewportSize="{TemplateBinding ViewportWidth}"
                        Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

答案 1 :(得分:0)

滚动条位置由FlowDirection属性定义。

有关详细信息,请参阅https://stackoverflow.com/a/22717596/2075605

答案 2 :(得分:0)

上面的代码是从右向左改变。但是,您需要从左到右。使用与上面相同的代码,但将scrollcontent presenter更改为:

<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" Grid.Column="0" Grid.Row="0"/>

$

我测试了它,它对我有用