首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

覆盖 ScrollViewer 的默认控件模板时,VirtualizingStackPanel 停止工作

覆盖 ScrollViewer 的默认控件模板时,VirtualizingStackPanel 停止工作是因为 ScrollViewer 的默认模板中使用了 VirtualizingStackPanel,而覆盖默认模板时,需要手动添加 VirtualizingStackPanel。以下是解决方案:

  1. 在 ScrollViewer 的样式中添加 VirtualizingStackPanel: <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ScrollViewer}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <VirtualizingStackPanel Grid.Column="0" Grid.Row="0"> <ContentPresenter Content="{TemplateBinding Content}" /> </VirtualizingStackPanel> <ScrollBar Name="PART_VerticalScrollBar" Grid.Column="1" Grid.Row="0" Value="{Binding Path=VerticalOffset, RelativeSource={RelativeSource TemplatedParent}}" Maximum="{Binding Path=ExtentHeight, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{Binding Path=ViewportHeight, RelativeSource={RelativeSource TemplatedParent}}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> <ScrollBar Name="PART_HorizontalScrollBar" Grid.Column="0" Grid.Row="1" Value="{Binding Path=HorizontalOffset, RelativeSource={RelativeSource TemplatedParent}}" Maximum="{Binding Path=ExtentWidth, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{Binding Path=ViewportWidth, RelativeSource={RelativeSource TemplatedParent}}" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <VirtualizingStackPanel IsVirtualizing="True"> <!-- 在此处添加需要虚拟化的内容 --> </VirtualizingStackPanel> </ScrollViewer>这样,在覆盖 ScrollViewer 的默认控件模板时,VirtualizingStackPanel 仍然可以正常工作。
  2. 在需要使用 VirtualizingStackPanel 的 ScrollViewer 中添加 VirtualizingStackPanel.IsVirtualizing="True" 属性:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 扩展GridView控件——为内容项添加拖放及分组功能

    然而,这些功能并不是默认提供,需要编写一定代码才能实现。...GridViewEx 控件 GridViewEx控件弥补了GridView,功能如下: 实现Item Panel 拖拽操作,而不是WrapGrid,StackPanel、VirtualizingStackPanel...等 分组,实现拖拽功能; 我们也为GridViewEx增加了新建分组功能,如果用户将内容项拖到控件左边或右边时会触发新建分组操作。...在BeforeDrop事件Handler中,使用 NewGroupIndex 创建新数据组,并插入到已有组集合。最后,需要实现扩展GridView控件模板。...在用户可拖拽项目的位置创建新分组,并使用占位符来代替。一旦用户拖某一内容放置到控件边界,触发创建新分组,ItemsPresenter两个边界元素是新组占位符。

    2.9K50

    WPF实现消息中心

    一、概要 本文将讲解基于WPF实现一个消息中心功能,比如常见软件当中会经常收到服务端推送“新闻”、“公告”等消息。这个时候就需要对这个需求进行分析了。 功能分析如下: •消息内容显示。...•消息分类(通知类消息、交互类型消息例如可跳转到某个连接或程序内模块)•消息处理(接受、删除、忽略) 二、实现 1.消息内容显示 这里考虑自定义控件为Listbox,消息本身是一个多项内容且需要操作每一项...ItemContainerStyle="{DynamicResource ListBoxItemStyle}" ItemsSource="{Binding MessageItem}" ScrollViewer.HorizontalScrollBarVisibility...="Hidden"> <VirtualizingStackPanel...,如果小伙伴需要可根据自己需要修改。

    58310

    Silverlight:ScorllViewer随Tab键自动跟随子控件Focus滚动

    ScrollViewer里包含很多子控件默认情况下只能用鼠标手动拖动(或滚轮)滚动条以实现内容滚动,假如用户是键盘高手,习惯于用Tab键来切换子控件焦点,即使当前获得焦点控件在不可见区域,滚动条也不会自动跟随着滚动到相应位置...,这个非常不方便,今天在网上看到一个老外解决办法,代码转贴于此: private void _ScrollViewer_GotFocus(object sender, RoutedEventArgs...0 : newOffset; // no use returning negative offset }   即:给ScrollViewerGotFocus事件增加_ScrollViewer_GotFocus...处理方法,然后计算当前获取焦点控件与ScorllViewer偏移距离,最终得出滚动条应该滚动偏移量。...静下来细想一下:其实我们本意是要解决用户按TAB键问题,只要在KeyDown或KeyUP事件里处理就行了,没必要在GetFocus处理,于是有了下面的改进版: <UserControl x:Class

    1.2K60

    WPF继续响应被标记为已处理事件方法

    WPF中在冒泡事件或者隧道事件会随其层间关系在visual tree上层层传递,但是,某些事件传递到某些控件是即会”终止“(不再响应相应注册事件),给人一种事件终结者印象。...产生原因:事件处理到达该控件后,其事件对象属性Handled被标记为True。WPF事件引擎在处理控件对应事件,若检测到该属性为True,就不会调用相应处理程序。...若仍想再其上层元素中(上层是相对事件传递方向而言)仍然处理响应事件,解决方式: 1、若上层控件可以注册相应事件。即没有重写对应控件Template属性。...Grid_MouseDown(object sender, MouseEventArgs e) { MessageBox.Show("GridMouseDown事件"); } 2、当自定义控件模板...在控件模版中,ScrollViewerMouseButtonDown事件处理事件如下:断点设置会发现鼠标点击并不会触发。

    94610

    New UWP Community Toolkit - AdaptiveGridView

    AdaptiveGridView 控件能够以均匀分组方式,让一组列填充整个显示空间,它可以对布局和内容变化做出反应,以便自动适应不同外观。我们来看一下官方示例展示: ?...去显示特定 item;当 d 为 FrameworkElement 类型,绑定 ItemWidth 和 ItemHeight 属性;当为 ContentControl 类型,HorizontalContentAlignment...或 container 为空,设置为需要 container Margin;最后根据 每一列在 container 中宽度,减掉 itemMargin,得到 itemWidth; protected...OneRowMode 使用,作用是把原高度,加上 padding 和 margin 变成新高度,效果就是单行模式,元素在高度上没有空隙;设置 Item padding 和 margin 会失效...总结 到这里我们就把 UWP Community Toolkit 中 AdaptiveGridView 控件源代码实现过程和简单调用示例讲解完成了,希望能对大家更好理解和使用这个控件有所帮助。

    1.4K70

    WPF中非递归(无后台代码)动态实现TreeView

    在UI界面中,树形视图是比较常用表示层级结构方式,WPF中提供了TreeView控件。对于TreeView控件基本使用已经有很多文章。...大都是介绍如何在XAML中使用硬编码固定信息填充Treeview控件,或者是后台代码递归遍历数据源,动态创建TreeView。...技术要点与实现 本文技术关键点是层级式数据模板HierarchicalDataTemplate。...HierarchicalDataTemplate是一个特殊DataTemplate,它能够包装第二层模板。通过ItemsSource属性查找下一层级数据集合,并将它提供给第二层模板。...TreeView 默认关闭虚拟化,是因为早期WPF发布版本中VirtualizingStackPanel不支持层次化数据,虽然现在已支持,但是TreeView默认关闭虚拟化确保兼容性。

    27140

    动手写一个简单消息对话框

    因此,当需要一个与应用程序主题风格一致消息对话框,只能自己动手造轮子了。 确定“轮子”功能 消息对话框核心功能是向用户显示信息,并在用户对消息进行处理前中断用户操作。...这样做并非多此一举,而是为了方便局部需要个性化样式最大限度地复用默认全局样式。 自定义消息对话框模板 消息对话框整体可以划分为信息区域和交互区域两部分。...前边确定功能提到调用消息对话框窗口显示遮罩层。...,通过造轮子,重新温习了样式、主题、控件模板、数据模板模板选择器、触发器、值转换器等技术。...这也是MaterialDesign、HandyControl等控件珠玉在前,还要自己造轮子原因之一。

    33210

    win10 uwp 禁用 ScrollViewer 交互

    如果在 UWP 有一个控件里面有 ScrollViewer 控件,那么因为默认 ScrollViewer 会使用触摸交互,这样在控件就收不到触摸交互 通过 VerticalScrollMode="...Disabled" HorizontalScrollMode="Disabled" 可以关闭 ScrollViewer 交互 接下来就是简单告诉大家如何使用 ScrollViewer 在禁用默认交互还让...ScrollViewer 滑动,先创建一个简单 UWP 项目 打开 xaml 添加一点代码,创建一个 Canvas 放在 ScrollViewer 内,在里面放一个矩形,通过这个矩形就可以知道有没有移动...ManipulationMode 可以水平或垂直,设置 Grid 背景是让 Grid 有命中测试,这样 UWP 才知道用户点击到哪个控件,通过 ManipulationMode 才可以让事件知道可以如何做...> 此时就可以看到 Grid 收到 Pointer 事件 但是如果想要 ScrollViewer 外面的控件可以收到交互同时想要让 ScrollViewer 可以和之前一样,那么就需要自己写一些代码 首先给

    79750

    .net Framework 源代码 · ScrollViewer 使用原理其他源代码分析

    看完本文,可以学会如何写一个 ScrollViewer ,如何定义一个 IScrollInfo 或者给他滚动添加动画 使用 下面告诉大家如何简单使用 ScrollViewer ,一般在需要滚动控件外面放一个...> 但不是所有的控件外面放一个 ScrollViewer 都能实现滚动,因为滚动实际上需要控件自己做。...在 ScrollViewer 存在两个滚动方式,物理滚动 和 逻辑滚动,如果使用 物理滚动 那么滚动就是ScrollViewer,如何使用逻辑滚动,那么滚动就是控件自己做。...ScrollInfo 那么 ScrollInfo 是什么,实际上他是一个接口,在 ScrollViewer 里面放控件实际上不是直接放在 ScrollViewer 里,控件是放在 ScrollContentPresenter...从垃圾微软源代码可以看到 HookupScrollingComponents 逻辑,首先是判断属性CanContentScroll 判断元素里控件是否可以滚动,如果元素里控件可以滚动,那么再判断元素里控件是不是继承

    1.8K10

    dotnet Framework 源代码 · ScrollViewer

    看完本文,可以学会如何写一个 ScrollViewer ,如何定义一个 IScrollInfo 或者给他滚动添加动画 使用 下面告诉大家如何简单使用 ScrollViewer ,一般在需要滚动控件外面放一个...> 但不是所有的控件外面放一个 ScrollViewer 都能实现滚动,因为滚动实际上需要控件自己做。...在 ScrollViewer 存在两个滚动方式,物理滚动 和 逻辑滚动,如果使用 物理滚动 那么滚动就是ScrollViewer,如何使用逻辑滚动,那么滚动就是控件自己做。...ScrollInfo 那么 ScrollInfo 是什么,实际上他是一个接口,在 ScrollViewer 里面放控件实际上不是直接放在 ScrollViewer 里,控件是放在 ScrollContentPresenter...从垃圾微软源代码可以看到 HookupScrollingComponents 逻辑,首先是判断属性CanContentScroll 判断元素里控件是否可以滚动,如果元素里控件可以滚动,那么再判断元素里控件是不是继承

    72820
    领券