2013-02-27 164 views
6

हम एक डेस्कटॉप अनुप्रयोग, जिसमें हम एक ListView है है, ListView.ItemTemplate एक KPageScrollViewer जो ScrollViewerरीसाइक्लिंग क्यों काम नहीं कर रहा है?

हालांकि हम सेट VirtualizingStackPanel.IsVirtualizing="True" और VirtualizingStackPanel.VirtualizationMode="Recycling"

हमने देखा है फैली हुई है कि KPageScrollViewer के निर्माता (जो ItemTemplate के भीतर है) ListView के अंदर आइटम देखने के दौरान हमेशा निष्पादित किया जाता है।

हमें उम्मीद है कि यह 4 से 5 गुना बनाया जाएगा, फिर, उसी उदाहरण का उपयोग डेटा देखने के लिए किया जाएगा क्योंकि हम रीसाइक्लिंग मोड का उपयोग कर रहे हैं, लेकिन ऐसा नहीं होगा, इस प्रकार हम और अधिक समाप्त करेंगे और अधिक KPageScrollViewer उदाहरण बनाए गए ..

ऐसा इसलिए है क्योंकि हमने ListView.ItemsPanel को अनुकूलित किया है?

<ListView.ItemsPanel> 
    <ItemsPanelTemplate > 
     <p:KVirtualizingStackPanel IsItemsHost="True" 

कोई विचार कृपया? मुझे आश्चर्य है कि कौन से कारण रीसाइक्लिंग सुविधा खोने का कारण बन सकते हैं?

<ListView x:Class="KETAB.KStudio.Stage.PagesView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:p="clr-namespace:KETAB.KStudio.Stage" 
    Name="PagesList" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" 
    Loaded="instScroll_Loaded" 
    AllowDrop="True" 
    MouseMove="PagesList_MouseMove" 
    ScrollViewer.PanningMode="None" 
    VirtualizingStackPanel.IsVirtualizing="True" 
    VirtualizingStackPanel.CleanUpVirtualizedItem="PagesList_CleanUpVirtualizedItem" 
    VirtualizingStackPanel.VirtualizationMode="Recycling" 
    > 

    <ListView.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/StageResources.xaml"/> 
       <ResourceDictionary Source="/KETAB.KStudio.UserControls;component/ScrollViewerStyle.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Opacity="0.4" Color="Transparent" /> 
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Opacity="0.4" Color="Transparent" /> 
      <!--<p:PageWidthConverter x:Key="PageWidthConverter" />--> 
      <p:PageWidthConverter x:Key="pageWidthConverter" /> 
      <p:PageHeightConverter x:Key="pageHeightConverter" /> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ListViewItem}"> 
          <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="FocusVisualStyle" 
      Value="{x:Null}"/> 
      </Style> 
     </ResourceDictionary> 
    </ListView.Resources> 

    <ListView.ItemTemplate> 
     <DataTemplate x:Name="PagesViewDataTemplate"> 
      <DataTemplate.Resources> 
       <Style x:Key="PageHostStyle" TargetType="{x:Type p:KPage}"> 
       </Style> 
      </DataTemplate.Resources> 
      <p:KPageScrollViewer Name="ScrollContainer" 
           Padding="{Binding ElementName=PagesList, Path=PageScrollViewerPadding}" 
           Height="{Binding ElementName=PagesList, Path=ScaleY, Converter={StaticResource pageHeightConverter}}" 
           Width="{Binding ElementName=PagesList, Path=ScaleX, Converter={StaticResource pageWidthConverter}}" 
           MaxHeight="{Binding ElementName=PagesList, Path=Height}" 
           MaxWidth="{Binding ElementName=PagesList, Path=Width}"  
           ScrollViewer.HorizontalScrollBarVisibility="{Binding ElementName=PagesList, Path=PageScrollVisibilityHori}" 
           ScrollViewer.VerticalScrollBarVisibility="{Binding ElementName=PagesList, Path=PageScrollVisibilityVert}"         > 
       <Grid x:Name="MarginStack" > 
        <p:KPage x:Name="KPage" SizeChanged="KPage_SizeChanged" > 

        </p:KPage> 
       </Grid> 
      </p:KPageScrollViewer> 
     </DataTemplate> 
    </ListView.ItemTemplate> 

    <ListView.ItemsPanel> 
     <ItemsPanelTemplate > 
      <p:KVirtualizingStackPanel IsItemsHost="True" 
           x:Name="WrapPanel1" 
           Orientation="{Binding ElementName=PagesList, Path=MyOrientation}" 
           VerticalAlignment="Center" 
           HorizontalAlignment="Center" 
           ClipToBounds="{Binding ElementName=PagesList, Path=PanelClipToBounds}"   
           Height="{Binding ElementName=PagesList, Path=ScaleY, Converter={StaticResource pageHeightConverter}}" 
           Width="{Binding ElementName=PagesList, Path=ScaleX, Converter={StaticResource pageWidthConverter}}" 
           MaxHeight="{Binding ElementName=PagesList, Path=Height}" 
           MaxWidth="{Binding ElementName=PagesList, Path=Width}"  
           > 
      </p:KVirtualizingStackPanel> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 

</ListView> 

संपादित

यहाँ है, जहां ListView प्रयोग किया जाता है: (पी: PagesView)

<Window x:Class="KETAB.KStudio.UI.WindowMain" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:kStudioControls="clr-namespace:KETAB.KStudio.UI" 
    xmlns:toolBoxUIPanel="clr-namespace:KETAB.KStudio.UI" 
    xmlns:Controls="clr-namespace:KETAB.KStudio.UserControls;assembly=KETAB.KStudio.UserControls" 
    xmlns:p="clr-namespace:KETAB.KStudio.Stage;assembly=KETAB.KStudio.Stage" 
    xmlns:tb="http://www.hardcodet.net/taskbar" 
    SizeChanged="Window_SizeChanged"  
    WindowState="Maximized" 
    WindowStyle="None" 
    Background="Transparent" 
    ResizeMode="CanResizeWithGrip" 
    PreviewKeyUp="WindowMain_PreviewKeyUp" 
    Closed="WindowMain_Closed" 
    Stylus.IsPressAndHoldEnabled="False" 
    Stylus.IsTapFeedbackEnabled="False" 
    Stylus.IsTouchFeedbackEnabled="False" 
    Stylus.IsFlicksEnabled="False" 
    AllowsTransparency="True"> 

    <Grid FlowDirection="LeftToRight" Name="MainUIContainer"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="auto" MinHeight="0" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <tb:TaskbarIcon 
        x:Name="MyNotifyIcon" 
        IconSource="/KETABStudio;component/KStudioControls/KStudioIcons/Notify.ico" 
        ToolTipText="KETAB Studio" Visibility="Collapsed"/> 

     <Border Name="borderContainer" ClipToBounds="True" Margin="0,0,0,0" Grid.Row="1" Grid.Column="0" BorderThickness="2, 0, 2, 2" 
       BorderBrush="{StaticResource MainWindowBorderColor}" Background="White"> 
      <Grid Background="Transparent" ClipToBounds="True" Name="MainUISplit" SizeChanged="MainUISplit_SizeChanged"> 
       <!--main backgound depends on this grid--> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="auto" /> 
       </Grid.ColumnDefinitions> 

       <Grid Background="{StaticResource background}" Margin="0" ClipToBounds="True" Name="applicationBackground"> 
        <Rectangle Name="OpacityRectangle" Visibility="Hidden" Margin="0,0,-60,0" Fill="Black" ></Rectangle>      
       </Grid> 

       <!--Page Area--> 
       <Grid Grid.Column="0" Grid.Row="0" Margin="0" Name="PageArea" AllowDrop="True"> 
        <p:PagesView Name="PageList" /> 
        <Controls:PageLoadingControl x:Name="pageLoadingControl" Visibility="Collapsed"/> 
        <Controls:HelpMode x:Name="HelpModeInstance" Visibility="Collapsed"/> 
       </Grid> 
      </Grid> 
     </Border> 
    </Grid> 
</Window> 
+0

कृपया दिखाएं कि आपकी सूची दृश्य – Alan

+0

के अंदर क्या है, कृपया ऊपर संपादित करें देखें, मैंने समस्या पर ध्यान केंद्रित करने के लिए अन-संबंधित कोड को निकालने का प्रयास किया .. – simo

+1

लंबवत स्क्रॉलबार अक्षम होने पर आप इस सूची दृश्य को कैसे स्क्रॉल करते हैं, 'crollViewer.VerticalScrollBarVisibility = "छिपा" '? मैंने इस लाइन को हटा दिया और वर्चुअलाइजेशन ने मेरे नमूना अनुप्रयोग में ठीक काम करना शुरू कर दिया। – vorrtex

उत्तर

0

मैं जिसके बाद मदद की हो सकती है पढ़ें ... के साथ क्या करना है जिस तरह से आप आइटमपैनेल का उपयोग कर रहे हैं: Virtualizing an ItemsControl? - मुझे एहसास है कि यह बिल्कुल वही विषय नहीं है, लेकिन यह एक बहुत ही समान मुद्दे के बारे में अच्छी व्याख्या है।

उम्मीद है कि इससे मदद मिलेगी।