2010-11-10 20 views
6

स्क्रॉल नहीं करता है मेरे पास एक स्क्रॉलव्यूयर वाला ग्रिड व्यू है जो ग्रिड व्यू की सामग्री के साथ क्षैतिज स्क्रॉल करने के लिए उपयोग किया जाता है। मैंने इसे Chris Cavanagh's rounded corners solution का उपयोग करके बदल दिया, जिसमें ग्रिडव्यूहेडररॉउपेंटर के चारों ओर एक ग्रिड डालना और उसी स्तर पर एक सीमा जोड़ना शामिल है जिसे तब अस्पष्टता मुखौटा (see this question for more information) के रूप में उपयोग किया जाता है।डब्ल्यूपीएफ ग्रिड व्यू हेडर क्षैतिज

यह हेडर के लिए क्षैतिज स्क्रॉलिंग अक्षम करने लगता है। यदि मैं ब्राउज़र विंडो को सामग्री के लिए स्क्रॉलबार को मजबूर करने के लिए कुछ छोटे आकार में बदलता हूं, तो हेडर निश्चित रहता है। मुझे कल्पना है कि जोड़ा गया xaml किसी भी तरह हेडर के लिए स्क्रॉलिंग अक्षम करता है।

यह कोड वर्तमान में जैसा दिखता है। कृपया ध्यान दें कि यह एक स्टाइल परिभाषा में है जो पृष्ठ पर XAML मार्कअप में सीधे स्क्रॉल व्यूअर तत्व को लक्षित नहीं करता है।

<ScrollViewer Focusable="false" 
       HorizontalScrollBarVisibility="Hidden" 
       VerticalScrollBarVisibility="Hidden" 
       DockPanel.Dock="Top" 
       Style="{DynamicResource HEK_ScrollViewer}"> 
    <Grid> 
     <Border Name="Mask" 
       CornerRadius="20,20,0,0" 
       Background="White" /> 
     <GridViewHeaderRowPresenter Margin="1,0,1,1" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
            Columns="{Binding TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}" 
            AllowsColumnReorder="{Binding TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}" 
            ColumnHeaderContainerStyle="{DynamicResource HEK-GridViewColumnHeaderStyle}" 
            ColumnHeaderContextMenu="{Binding TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}" 
            ColumnHeaderStringFormat="{Binding TemplatedParent.View.ColumnHeaderStringFormat, RelativeSource={RelativeSource TemplatedParent}}" 
            ColumnHeaderTemplate="{Binding TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}" 
            ColumnHeaderTemplateSelector="{Binding TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}" 
            ColumnHeaderToolTip="{Binding TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}"> 
      <GridViewHeaderRowPresenter.OpacityMask> 
       <VisualBrush Visual="{Binding ElementName=Mask}" /> 
      </GridViewHeaderRowPresenter.OpacityMask> 
     </GridViewHeaderRowPresenter> 
    </Grid> 
</ScrollViewer> 

उत्तर

1

मुझे सच में यकीन नहीं है कि उस व्यवहार का कारण क्या है। मुझे लगता है कि ListView में कुछ कोड है जो एक GridViewHeaderRowPresenter को हेडर स्क्रॉल व्यूअर के प्रत्यक्ष बच्चे के रूप में अपेक्षा करता है।

लेकिन यदि आप ग्रिड को स्क्रॉलव्यूअर पर अभिभावक के रूप में ले जाते हैं, तो यह सही ढंग से स्क्रॉल करता है।

<DockPanel Margin="{TemplateBinding Padding}"> 
    <Grid DockPanel.Dock="Top"> 
     <Border Name="Mask" CornerRadius="4,4,0,0" Background="White" /> 
     <ScrollViewer Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"> 
      <GridViewHeaderRowPresenter AllowsColumnReorder="{Binding TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderContainerStyle="{Binding TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderToolTip="{Binding TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderContextMenu="{Binding TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderTemplate="{Binding TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}" Columns="{Binding TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}" Margin="2,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> 
       <GridViewHeaderRowPresenter.OpacityMask> 
        <VisualBrush Visual="{Binding ElementName=Mask}" /> 
       </GridViewHeaderRowPresenter.OpacityMask> 
      </GridViewHeaderRowPresenter> 
     </ScrollViewer> 
    </Grid> 
    <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" KeyboardNavigation.DirectionalNavigation="Local" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
</DockPanel> 
0

हालांकि पुरानी पोस्ट है, लेकिन अगर किसी के पास एक ही समस्या है। यह कुछ हद तक Tedy Pranolo के समाधान के समान है। मुझे यह समस्या थी जहां ग्रिड हेडर सामग्री के साथ स्क्रॉल नहीं करेगा। ScrollViewer (ListView के लिए) ControlTemplate में GridViewHeaderRowPresenter के लिए केवल स्क्रॉलव्यूअर जोड़ना मेरे लिए समस्या का समाधान करता है।

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:interactivity="clr-namespace:XYZ.WPF.Interactivity;assembly=XYZ.WPF"> 
<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="{x:Type ScrollViewer}"> 
    <Setter Property="interactivity:MouseWheelBubbleBehavior.BehaviorSource" Value="{Binding RelativeSource={RelativeSource Self}}"/> 
    <Setter Property="Focusable" Value="false"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
       <Grid Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <DockPanel Margin="{TemplateBinding Padding}"> 
         <GridViewHeaderRowPresenter AllowsColumnReorder="{Binding TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderContainerStyle="{Binding TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderToolTip="{Binding TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderStringFormat="{Binding TemplatedParent.View.ColumnHeaderStringFormat, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderContextMenu="{Binding TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderTemplate="{Binding TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}" Columns="{Binding TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderTemplateSelector="{Binding TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}" Margin="2,0,2,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" KeyboardNavigation.DirectionalNavigation="Local" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </DockPanel> 
        <ScrollBar x:Name="PART_HorizontalScrollBar" Cursor="Arrow" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0.0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/> 
        <ScrollBar x:Name="PART_VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0.0" Orientation="Vertical" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/> 
        <DockPanel Background="{Binding Background, ElementName=PART_VerticalScrollBar}" Grid.Column="1" LastChildFill="false" Grid.Row="1"> 
         <Rectangle DockPanel.Dock="Left" Fill="White" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Width="1"/> 
         <Rectangle DockPanel.Dock="Top" Fill="White" Height="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 
        </DockPanel> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

सूचना लापता ScrollViewer enclosing GridViewHeaderRowPresenter:

<DockPanel Margin="{TemplateBinding Padding}"> 
         <ScrollViewer DockPanel.Dock="Top" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden" > 
          <GridViewHeaderRowPresenter AllowsColumnReorder="{Binding TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderContainerStyle="{Binding TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderToolTip="{Binding TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderStringFormat="{Binding TemplatedParent.View.ColumnHeaderStringFormat, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderContextMenu="{Binding TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderTemplate="{Binding TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}" Columns="{Binding TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderTemplateSelector="{Binding TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}" Margin="2,0,2,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         </ScrollViewer> 
         <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" KeyboardNavigation.DirectionalNavigation="Local" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </DockPanel> 

यह XAML जब मुद्दा था है: यह XAML का हिस्सा है जो समस्या का समाधान हो गया है।

आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे