2012-03-15 25 views
6

Listede yeterli nesne olduğunda sağ tarafta görünen bir ScrollViewer var. Sol tarafta nasıl görünebilirim?Sağ taraf yerine sol taraftaki gizli görüntüleyicinin nasıl görüneceği

<ListBox 
x:Name="MessageListBox" 
BorderThickness="0" 
ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
HorizontalContentAlignment="Stretch" 
AlternationCount="2" 
ItemContainerStyle="{StaticResource AltStyle}" 
SelectionMode="Extended" 
> 
<ListBox.ItemTemplate > 
    <DataTemplate> 
    <!-- button --> 
<!-- closing tags --> 
+1

öbür tarafa bu hareketli dikkat. Normal uygulama sağ taraftadır ve solu koymak, kullanıcılarınızı şaşırtabilir/tahriş edebilir. – tsells

cevap

3

Bu, ListBox'un ScrollViewer şablonunun değiştirilerek gerçekleştirilir.

Kapsayıcı Izgarası için SütunDefinitions'ı değiştirerek başlayın. Ardından, nesneleri doğru sütunlara yerleştirin.

İyi eğlenceler!

<!--This should be able to be placed on any WPF Window for testing purposes--> 
<ListBox Height="85" VerticalAlignment="Top" Margin="117,110,300,0"> 
    <ListBox.Template> 
     <ControlTemplate TargetType="{x:Type ListBox}"> 
      <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true"> 
       <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"> 
        <ScrollViewer.Template> 
         <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
          <Grid x:Name="Grid" Background="{TemplateBinding Background}"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto"/> 
            <ColumnDefinition Width="*"/>      
           </Grid.ColumnDefinitions> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="*"/> 
            <RowDefinition Height="Auto"/> 
           </Grid.RowDefinitions> 
           <Rectangle x:Name="Corner" Grid.Column="0" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/> 
           <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="1" Margin="{TemplateBinding Padding}" Grid.Row="0"/> 
           <ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/> 
           <ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/> 
          </Grid> 
         </ControlTemplate> 
        </ScrollViewer.Template> 
        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
       </ScrollViewer> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsEnabled" Value="false"> 
        <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
       </Trigger> 
       <Trigger Property="IsGrouping" Value="true"> 
        <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </ListBox.Template> 
    <TextBox Text="Hi Mom!"/> 
    <TextBox Text="Hi Dad!"/> 
    <TextBox Text="Hi Father!"/> 
    <TextBox Text="Hi Mother!"/> 
    <TextBox Text="Hi Padre!"/>    
</ListBox> 

Not; HorizontalScrollBar'ı taşımak istediğinizde, RowDefinitions'ı yeniden düzenleyin, aynı alıştırmayı yapın (her alt bileşeni doğru satırda koyun)

+0

Kaydırma çubuğu belirir, ancak kaydırıyor veriyi kaydırmıyor – 0x4f3759df

+0

Evet, bir liste kutusu kullandığınızı fark ettim ve gönderiyi doğru şekilde düzenledim, daha önce orada bulunan itemspresenter'ı kullandığından emin olmak istersiniz. – Jeremiah

+0

Ve şimdi WPF'de olduğunuzu görüyorum ... daha fazla değişiklik geliyor. – Jeremiah

9

Listeyi ScrollViewer'a kaydırıp ScrollViewer özelliğini FlowDirection olarak değiştirerek yapılabilir " Sağdan sola". Ayrıca 'FlowDirection' Listesini LeftToRight'a geri yüklemeyi de unutmayın, aksi takdirde ebeveynin yönünü devralır. Ben MSDN sosyal bloglar buldum

<ScrollViewer FlowDirection="RightToLeft" 
    CanContentScroll="False" VerticalScrollBarVisibility="Auto"> 
    <ListBox ItemsSource="{Binding CustomItems}" FlowDirection="LeftToRight"/> 
</ScrollViewer> 

, http://social.msdn.microsoft.com/Forums/vstudio/en-US/e796231d-5c92-44b4-bb7e-c3b74d81a99c/how-to-set-verticalscroll-bar-on-left-side?forum=wpf

+0

Bu, SrollViewer'da hangi kontrolün içeriğinin tersine çevrileceğini gösterir. Bunu dikkate almazsanız, çok zararlı etkileri olabilir. – claudekennilol

+2

@claudekennilol - Aslında, bu mükemmel çalışır çünkü FlowDirect'i liste kutusunun içinde LeftToRight'a geri yükler. Çok fazla eşya varsa, hepsini bir ızgaraya da koyabilirsiniz. –

+1

@AnthonyNichols Doğru, şunu belirtmeliydi * bu * örnek bunu yapar, ancak genel olarak ne yapacağını bilmeyen biri için işaret etmek iyidir. – claudekennilol

0

Basitçe RightToLeft ListBox gömülü ScrollViewer ayarlayın:

<ListBox ScrollViewer.FlowDirection="RightToLeft" /> 
İlgili konular