2012-03-15 12 views
6

मेरे पास एक स्क्रॉलव्यूयर है जो दाएं हाथ पर दिखाई देता है जब पर्याप्त वस्तुएं सूची में होती हैं। मैं इसे बाईं ओर कैसे दिख सकता हूं?अंतर्निहित स्क्रॉलव्यूअर दाएं हाथ की तरफ दाएं हाथ की ओर कैसे दिखें

<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

मैं दूसरे पक्ष को यह चलती चेतावनी देते हैं। सामान्य कार्यान्वयन सही पक्ष है और बाईं ओर डालने से आपके उपयोगकर्ताओं को भ्रमित/परेशान कर सकते हैं। – tsells

उत्तर

3

यह सूची बॉक्स के स्क्रॉल व्यूअर के टेम्पलेट को संशोधित करके पूरा किया जाता है।

कंटेनर ग्रिड के लिए कॉलमडिफिनिशन को संशोधित करके प्रारंभ करें। फिर, चीजों को सही कॉलम में रखें।

मज़े करो!

<!--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> 

पेज। यदि आप क्षैतिज स्क्रॉलबार को स्थानांतरित करना चाहते हैं, तो बस पंक्ति परिभाषाओं को पुन: व्यवस्थित करें, वही अभ्यास करें (प्रत्येक पंक्ति घटक को उचित पंक्ति में रखें)

+0

स्क्रॉलबार दिखाई देता है, लेकिन यह स्क्रॉल करने से यह मेरे डेटा को स्क्रॉल नहीं करता है – 0x4f3759df

+0

हाँ, मैंने देखा है कि आप एक सूची बॉक्स का उपयोग कर रहे थे, और पोस्ट को सही ढंग से संपादित किया था, आप यह सुनिश्चित करना चाहते हैं कि यह पहले मौजूद आइटमपेंडर का उपयोग करे। – Jeremiah

+0

और अब मैं देखता हूं कि आप WPF में हैं ... और अधिक परिवर्तन आ रहे हैं। – Jeremiah

9

यह सूची को स्क्रॉलव्यूयर में लपेटकर और स्क्रॉलव्यूयर प्रॉपर्टी फ्लोडायरेक्शन को " दाएं से बाएं"। सूची 'फ्लोडायरेक्शन टू वाम टू राइट को पुनर्स्थापित करना भी न भूलें अन्यथा यह माता-पिता की दिशा का उत्तराधिकारी होगा।

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

मैं MSDN सामाजिक ब्लॉग पर यह पाया, 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

यह स्क्रॉलव्यूअर में जो भी नियंत्रण है, उसकी सामग्री को उलटा कर देगा। इसलिए यदि आप इसे ध्यान में नहीं लेते हैं तो इसका अत्यधिक हानिकारक प्रभाव हो सकता है। – claudekennilol

+2

@claudekennilol - असल में, यह पूरी तरह से काम करता है क्योंकि वे FlowDirect को वापस सूची बॉक्स के अंदर LeftToRight पर सेट कर रहे हैं। यदि वहां बहुत सारी चीज़ें थीं तो आप उन्हें ग्रिड के अंदर भी लपेट सकते थे। –

+1

@ एंथनी निकोलस राइट, ने यह इंगित किया होगा कि * यह * उदाहरण ऐसा करता है, लेकिन किसी ऐसे व्यक्ति के लिए यह इंगित करना अच्छा होता है कि यह नहीं जानता कि यह समग्र रूप से क्या करेगा। – claudekennilol

0

सीधे शब्दों में RightToLeft करने के लिए ListBox के एम्बेडेड ScrollViewer सेट:

<ListBox ScrollViewer.FlowDirection="RightToLeft" /> 
संबंधित मुद्दे