6

私たちはListViewを持っているデスクトップアプリケーションを持っていますListView.ItemTemplate.KPageScrollViewerは拡張しますScrollViewer

私たちは設定VirtualizingStackPanel.IsVirtualizing="True"しましたが、 VirtualizingStackPanel.VirtualizationMode="Recycling"

ItemTemplateListView 内のアイテムを表示している間、KPageScrollViewer ( 内にある) のコンストラクターが常に実行されることに気付きました。

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 が使用されます: (p: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>
4

1 に答える 1

0

私は助けになるかもしれない以下を読みました...ItemsPanelの使用方法に関係しています:ItemsControlを仮想化しますか?- まったく同じトピックではないことは承知していますが、非常によく似た問題について適切に説明されています。

うまくいけば、それは役に立ちます。

于 2013-03-20T15:36:51.347 に答える