2013-03-01 2 views
0

У меня есть ScrollViewer на моей странице Windows Phone. Я хочу показать эксплицитно, что есть возможность прокрутки. По умолчанию сам элемент управления не показывает ничего, что может дать пользователю указание, что пространство прокручивается. Возможно ли, например, всегда показывать полосу прокрутки с правой стороны? Опять же, по умолчанию он отображается только тогда, когда пользователь хочет и пытается выполнить прокрутку.ScrollViewer Border (Windows Phone 7)

ответ

1

<ScrollViewer VerticalScrollBarVisibility="Visible"> не работает в телефоне Windows. Я думаю, вы можете изменить ControTemplate для ScrollViewer и сделать видимость полосы прокрутки.

Отредактировано:

Есть пример, как вы можете изменить шаблон управления для ScrolViewer. Я получил его от

MSDN
<Style x:Key="LeftScrollViewer" TargetType="ScrollViewer"> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="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> 

применить этот стиль ScrolViewer

<ScrollViewer Grid.Column="1" Style="{StaticResource LeftScrollViewer}"> 

этот пример не будет работать в Windows Phone, потому что это ScrollViewer ControlTemplate из descktop МОФ. Но вы можете использовать Expression Blend и получить Windows Phone ScrolViewer ControlTemplate и изменить что-то вроде

Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 

на Visibility="Visible"

1

Вы можете заменить шаблон ScrollViewer по умолчанию с той, которая всегда показывает полосу прокрутки. Обратите внимание, что это не соответствует принципам дизайна телефона для Windows, и вы должны тщательно подумать, прежде чем выбирать всегда отображение полосы прокрутки.

<phone:PhoneApplicationPage.Resources> 
    <Style x:Key="ScrollViewerStyle1" TargetType="ScrollViewer"> 
     <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ScrollViewer"> 
        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="ScrollStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="00:00:00.5"/> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Scrolling"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="VerticalScrollBar"/> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HorizontalScrollBar"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="NotScrolling"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Grid Margin="{TemplateBinding Padding}"> 
          <ScrollContentPresenter x:Name="ScrollContentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}"/> 
          <ScrollBar x:Name="VerticalScrollBar" HorizontalAlignment="Right" Height="Auto" IsHitTestVisible="False" IsTabStop="False" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Opacity="1" Orientation="Vertical" Visibility="Visible" Value="{TemplateBinding VerticalOffset}" ViewportSize="{TemplateBinding ViewportHeight}" VerticalAlignment="Stretch" Width="5"/> 
          <ScrollBar x:Name="HorizontalScrollBar" HorizontalAlignment="Stretch" Height="5" IsHitTestVisible="False" IsTabStop="False" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Opacity="0" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{TemplateBinding HorizontalOffset}" ViewportSize="{TemplateBinding ViewportWidth}" VerticalAlignment="Bottom" Width="Auto"/> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</phone:PhoneApplicationPage.Resources> 

<ScrollViewer Style="{StaticResource ScrollViewerStyle1}">