wpf listBox 滚动分页 和 复制字段

 

<ScrollViewer Background="White" RequestBringIntoView="ScrollViewer_RequestBringIntoView"
    Style="{StaticResource for_scrollviewer}" HorizontalScrollBarVisibility="Disabled"
    ScrollChanged="ScrollViewer_ScrollChanged" x:Name="svProject" Margin="0"             ScrollViewer.CanContentScroll="False">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="25"></RowDefinition>
        </Grid.RowDefinitions>
        <ListBox Margin="0,0,0,0" HorizontalAlignment="Stretch" Style="{StaticResource         listBoxWithoutScrollView}" ItemsSource="{Binding ProjectList}" x:Name="lbProjectList"
SelectedItem="{Binding SelectedProject,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" PreviewMouseWheel="ListBox_PreviewMouseWheel">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Orientation="Vertical" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ListBox.Resources>
                <Style TargetType="ListBoxItem">
                    <EventSetter Event="RequestBringIntoView" Handler="ScrollViewer_RequestBringIntoView" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBoxItem}">
                            <Border BorderBrush="#D6D6D6" Background="Transparent" BorderThickness="1,0,1,1">
                                <Grid MinHeight="50" Margin="15,0,0,0">
                                    <Grid.Resources>
                                        <Style TargetType="TextBlock">
                                            <Setter Property="Foreground" Value="{StaticResource MainForground}"></Setter>
                                            <Setter Property="FontSize" Value="{StaticResource FontSize14}"></Setter>
                                            <Setter Property="VerticalAlignment" Value="Center"></Setter>
                                            <Setter Property="HorizontalAlignment" Value="Left"></Setter>
                                            <Setter Property="HorizontalAlignment" Value="Left"></Setter>
                                            <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
                                            <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"></Setter>
                                            <Setter Property="Padding" Value="5,0,0,0"></Setter>
                                            <Setter Property="MaxWidth" Value="140"></Setter>
                                        </Style>
                                    </Grid.Resources>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="160" />
                                    <ColumnDefinition Width="100" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="100" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="70" />
                                </Grid.ColumnDefinitions>
                                <StackPanel Orientation="Horizontal" x:Name="spProCopy" Width="160">
                                <StackPanel Grid.Column="0" VerticalAlignment="Center" Cursor="Hand">
                                <TextBlock x:Name="txtNo" Text="{Binding projectNo}" Style="{StaticResource textBlock}"></TextBlock>
                                <TextBlock x:Name="txtName" Text="{Binding name}" Style="{StaticResource textBlock}" ></TextBlock>
                            </StackPanel>
                            <Button Content="复制" Click="Button_Click" Height="Auto" Width="35" Style="{StaticResource Foreground[#00CB7C]}" BorderThickness="0" HorizontalAlignment="Right" Visibility="{Binding ElementName=spProCopy,Path=IsMouseOver,Converter={StaticResource boolToVisibilityConverter}}"/>
                            </StackPanel>
                            <ItemsControl Grid.Column="1" VerticalAlignment="Center" Margin="0,0,0,6" ItemsSource="{Binding targetFlowLists}" >
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <WrapPanel Orientation="Vertical" />
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate >
                                        <DockPanel>
                                            <TextBlock Text="{Binding flowNo}" FontSize="14" VerticalAlignment="Center" MaxWidth="140" TextTrimming="CharacterEllipsis" Margin="5,0,0,0" Width="Auto" HorizontalAlignment="Left" x:Name="tbTargetFlow" ToolTip="{Binding targetFlowData}" />
                                            <TextBlock Text="{Binding lineNumStr,StringFormat=({0})}" FontSize="14" VerticalAlignment="Center" MaxWidth="60"  TextTrimming="CharacterEllipsis" Margin="1,0,0,0" Width="Auto" HorizontalAlignment="Left" ToolTip="{Binding lineNumStr}" >
                                                <TextBlock.Style>
                                                    <Style TargetType="TextBlock">
                                                        <Style.Triggers>
                                                            <DataTrigger Binding="{Binding flowNo}" Value="...">
                                                                <Setter Property="Visibility" Value="Collapsed"/>
                                                            </DataTrigger>
                                                        </Style.Triggers>
                                                    </Style>
                                                </TextBlock.Style>
                                            </TextBlock>
                                        </DockPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                            <TextBlock Grid.Column="2" Text="{Binding classifyName}"></TextBlock>
                            <Ellipse Grid.Column="3" Fill="{Binding priorityToBgColor}" Width="8" Height="8" HorizontalAlignment="Left" Margin="5,0,0,0"></Ellipse>
                            <TextBlock Grid.Column="3" Text="{Binding priorityToStr}" Foreground="{Binding priorityToBgColor}" Margin="20,0,0,0"></TextBlock>
                            <Grid x:Name="grid" Grid.Column="4" VerticalAlignment="Center">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="auto" />
                                </Grid.RowDefinitions>
                                <TextBlock MaxHeight="40" Grid.Row="0" Text="{Binding target}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"></TextBlock>
                                <Button Grid.Row="1" HorizontalAlignment="Left" Height="20" Click="ProjectOpenFile_Click" Tag="{Binding targetFile}" Visibility="{Binding targetFile,Converter={StaticResource ObjToVisiblityConvert}}" Style="{StaticResource Foreground[#58A2FB]}" FontSize="14" BorderThickness="0" Background="Transparent" Content="查看附件"></Button>
                                </Grid>
                                <TextBlock Grid.Column="5" Text="{Binding picName}" ><Run Text="{Binding showPicDuty}"></Run></TextBlock>
                                <StackPanel Grid.Column="6" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Center">
                                <TextBlock Text="预: " MaxHeight="40" MaxWidth="240">
                                    <TextBlock.Resources>
                                        <Style TargetType="TextBlock">
                                            <Setter Property="Foreground" Value="{StaticResource MainForground}"></Setter>
                                            <Setter Property="FontSize" Value="{StaticResource FontSize14}"></Setter>
                                            <Setter Property="VerticalAlignment" Value="Center"></Setter>
                                            <Setter Property="HorizontalAlignment" Value="Left"></Setter>
                                            <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
                                            <Setter Property="Padding" Value="5,0,0,0"></Setter>
                                            <Setter Property="MaxWidth" Value="140"></Setter>
                                        </Style>
                                    </TextBlock.Resources>
                                    <Run Text="{Binding planStartTimeToStr}"></Run><Run Text="~"></Run><Run Text="{Binding planEndTimeToStr}"></Run>
                                </TextBlock>
                                <TextBlock   MaxHeight="40" MaxWidth="240" Text="实: ">
                                    <TextBlock.Resources>
                                        <Style TargetType="TextBlock">
                                            <Setter Property="Foreground" Value="{StaticResource MainForground}"></Setter>
                                            <Setter Property="FontSize" Value="{StaticResource FontSize14}"></Setter>
                                            <Setter Property="VerticalAlignment" Value="Center"></Setter>
                                            <Setter Property="HorizontalAlignment" Value="Left"></Setter>
                                            <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
                                            <Setter Property="Padding" Value="5,0,0,0"></Setter>
                                            <Setter Property="MaxWidth" Value="140"></Setter>
                                        </Style>
                                    </TextBlock.Resources>
                                    <Run Text="{Binding startTimeToStr}"></Run><Run Text="~"></Run><Run Text="{Binding endTimeToStr}"></Run>
                                </TextBlock>
                            </StackPanel>
                            <Border Margin="5,0,0,0" VerticalAlignment="Center" Background="{Binding OverdueReminderToBgColor}" Width="Auto" MinWidth="57" Height="20" HorizontalAlignment="Left" Visibility="{Binding OverdueReminderToVisibility}">
                            <TextBlock Text="{Binding OverdueReminder}" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,5,0" Foreground="{Binding OverdueReminderToFgColor}" ></TextBlock>
                            </Border>
                        </StackPanel>
                        <StackPanel Grid.Column="8" VerticalAlignment="Center">
                            <StackPanel Orientation="Horizontal">
                                <Image Width="16" Height="16" Source="{Binding state,Converter={StaticResource ProjectStateToImageConvert}}" />
                                <TextBlock Text="{Binding stateToStr}"></TextBlock>
                            </StackPanel>
                            <StackPanel Orientation="Horizontal" Margin="0,5,0,0" Visibility="{Binding stateToStr,Converter={StaticResource StringToVisiblityStatusConverter},ConverterParameter=1}"  >
                            <Border Width="36" Height="12" Background="#EB5444" >
                             <TextBlock Text="{Binding unallocatedNum}" FontSize="11" Foreground="#FFFFFF" VerticalAlignment="Center" HorizontalAlignment="Center" />
                            </Border>
                            <Border Width="80" Height="12" Background="#00CB7C" >
                                <TextBlock  Text="{Binding unfinishNum}" FontSize="11" Foreground="#FFFFFF"  VerticalAlignment="Center" HorizontalAlignment="Center"  />
                            </Border>
                            <Border Width="36" Height="12" Background="#999999" >
                                <TextBlock Text="{Binding finishNum}" FontSize="11" Foreground="#FFFFFF"  VerticalAlignment="Center" HorizontalAlignment="Center"  />
                            </Border>
                        </StackPanel>
                    </StackPanel>
                    <StackPanel x:Name="ProjectOperation" Grid.Column="9" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Background="White" Cursor="Hand"  MouseUp="ProjectOperation_Click" >
                    <Grid Margin="0,0,0,0" HorizontalAlignment="Center" Visibility="{Binding commentNum,Converter={StaticResource IntToVisibilityConvert}, ConverterParameter=0}">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="评论(" FontSize="12" ></TextBlock>
                        <TextBlock Text="{Binding commentNumToStr}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="12" />
                        <TextBlock Text=")" FontSize="12"></TextBlock>
                    </StackPanel>
                </Grid>
            </StackPanel>
            <ToggleButton Click="ToggleButton_Click_1" Grid.Column="10" FontSize="{StaticResource FontSize14}" HorizontalAlignment="Right" Margin="0,0,20,0" VerticalAlignment="Center" Style="{StaticResource ToggleBtnStyle}" Foreground="#58A2FB" BorderThickness="0" Content="详情" x:Name="btn" />
                                    </Grid>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListBox.Resources>
        </ListBox>
        <TextBlock Text="共" HorizontalAlignment="Left" VerticalAlignment="Bottom" FontSize="12" Foreground="#FF999999" Grid.Row="1" Margin="0,0,0,5">
            <Run Text="{Binding totalRow}"></Run>
            <Run Text="条记录"></Run>
        </TextBlock>
    </Grid>
</ScrollViewer>



       xmal.cs

 /// <summary>
        /// 禁止滚动条自动回滚
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ScrollViewer_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
        {
            e.Handled = true;
        }

        /// <summary>
        /// 滚动发生变化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            ScrollViewer sv = e.OriginalSource as ScrollViewer;

            if (sv != null)
            {
                bool scroll = IsVerticalScrollBarAtButtom(sv);
                if (scroll == true)
                {
                    sv.CanContentScroll = false;
                }
            }
        }



        public bool IsVerticalScrollBarAtButtom(ScrollViewer s)
        {

            bool isAtButtom = false;
            double dVer = s.VerticalOffset;
            double dViewport = s.ViewportHeight;
            double dExtent = s.ExtentHeight;

            if (dVer != 0)
            {
                if (dVer + dViewport == dExtent)
                {
                    isAtButtom = true;
                }
                else
                {
                    isAtButtom = false;
                }
            }
            else
            {
                isAtButtom = false;
            }
            if (s.VerticalScrollBarVisibility == ScrollBarVisibility.Disabled
                || s.VerticalScrollBarVisibility == ScrollBarVisibility.Hidden)
            {
                isAtButtom = true;
            }
            return isAtButtom;
        }

        /// <summary>
        /// 项目滚动条分页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ListBox_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            if (e.Delta <= 0)
            {
                if (svProject.VerticalOffset + svProject.ViewportHeight == svProject.ExtentHeight)
                {
                    if (vm.hasNext == true)
                    {
                        vm.ProjectSearchReq.pageNum = vm.ProjectSearchReq.pageNum + 1;
                        vm.查询(查询条件);
                    }
                    else return;
                }
            }
        }



 private void Button_Click(object sender, RoutedEventArgs e)
        {
            var btn = sender as Button;
            if (btn == null) return;
            var model = btn.DataContext as ProjectModel;
            string content = model.no+"\n"+ model.name;
            Clipboard.SetText(content);
            Utils.MessageHelper.GetSingleObj().ShowMsg(new Model.Common.BaseReturnModel() { BaseCode = 200, BaseMsg = "复制成功!" });
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPF ListBox 控件本身并没有提供分页的功能。但是可以通过以下步骤来实现基于滚动条的分页: 1. 确定每一页的大小,例如每页显示 10 条数据。 2. 将数据分成多个列表,每个列表包含一页的数据。可以使用 LINQ 的 Skip 和 Take 方法来实现数据分页。 3. 根据列表数量设置滚动条的最大值,滚动条每滚动一页,就显示下一个列表。 4. 当滚动条的值发生变化时,根据滚动条的值计算当前显示的数据列表,并将其绑定到 ListBox 控件上。 下面是一个示例代码,演示如何实现基于滚动条的分页: ``` // 定义每页大小 private const int PageSize = 10; // 原始数据列表 private List<string> _originalData; // 分页后的数据列表 private List<List<string>> _pagedData; // 初始化数据 private void InitializeData() { _originalData = new List<string>(); for (int i = 1; i <= 100; i++) { _originalData.Add($"Item {i}"); } // 分页数据 _pagedData = _originalData .Select((item, index) => new { item, index }) .GroupBy(x => x.index / PageSize) .Select(g => g.Select(x => x.item).ToList()) .ToList(); // 设置滚动条范围 scrollBar.Maximum = _pagedData.Count - 1; } // 滚动条值变化事件处理 private void OnScrollBarValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { // 计算当前页码 int pageIndex = (int)scrollBar.Value; // 绑定当前页数据到 ListBox listBox.ItemsSource = _pagedData[pageIndex]; } ``` 在上面的代码中,我们先定义了每页的大小为 10,然后将原始数据分成多个列表,每个列表包含一页的数据。在滚动条的值变化事件处理中,根据滚动条的值计算当前页码,然后将当前页数据绑定到 ListBox 控件上。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值