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

当ScrollBar可见时,WPF ScrollViewer显示边框

当ScrollBar可见时,WPF ScrollViewer显示边框可以通过设置相关样式来实现。以下是一个简单的示例:

代码语言:xaml<Window.Resources>
复制
   <Style TargetType="{x:Type ScrollViewer}">
       <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>
                        <Rectangle Grid.Column="1" Grid.Row="1" Fill="Black" Width="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
                        <Rectangle Grid.Column="0" Grid.Row="1" Fill="Black" Height="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
                       <ScrollContentPresenter Grid.Column="0" Grid.Row="0" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
                       <ScrollBar Grid.Column="1" Grid.Row="0" Name="PART_VerticalScrollBar" Orientation="Vertical" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Value="{TemplateBinding VerticalOffset}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
                       <ScrollBar Grid.Column="0" Grid.Row="1" Name="PART_HorizontalScrollBar" Orientation="Horizontal" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Value="{TemplateBinding HorizontalOffset}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

在这个示例中,我们使用了一个Grid来显示边框,并将其可见性设置为ScrollBar的可见性。这样,当ScrollBar可见时,边框也会显示出来。

需要注意的是,这个示例仅仅是一个简单的示例,实际应用中可能需要更复杂的样式和逻辑来实现更好的效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

win10 uwp 如何判断一个控件在滚动条的里面是用户可见

在 UWP 中如何知道一个元素是在滚动条的显示大小内用户可以看到这个控件?如果需要在控件在滚动条里面用户可以看到的时候触发某个事件,在用户看不到的时候触发另一个事件可以怎么做?...昨天星期八再娶你 大佬问我如何判断在滚动条内可以看到某个元素,他需要在滚动条里面放一个视频播放器,在用户看不到这个播放器的时候自动停下这个播放器 在 UWP 的判断会比在 WPF 中复杂一些,我写过WPF...如何判断一个控件在滚动条的里面是用户可见但是在 UWP 中的小伙伴,也就是做 UWP 的大佬对 API 的设计会更加诡异 在 UWP 没有 ScrollChanged 事件只有ScrollViewer.ViewChanged...事件,但是这个事件和 WPF 的触发不相同的在于,如果我有外层的控件修改了滚动条的大小,不会触发这个事件。...的 TranslatePoint 方法相同 判断滚动条可见大小不能从方法的参数拿到,需要直接拿滚动条控件,这样会存在一个坑在于时机的问题,和 WPF 不相同,此时的事件很难做到精确拿到滚动条的当前的大小和移动距离

92420
  • WPF --- 如何重写WPF原生控件样式?

    比如 ComboBox 控件,我刚开始学习WPF的时候,我就不理解这个是怎么实现的,我后来还是通过查询微软官方文档 [1]ComboBox Styles and Templates ,文档里给出了...第四步:」 可以看到它生成了一堆的资源,这时候我们只需要找我们想要的那一部分,比如 ComboBoxTemplate ,从代码中就可以看出,ComboBox 主要有三部分组成 Popup:它的作用就是...ToggleButton 的 IsChecked 为true,展开其内容,它的内容就是 ScrollViewer,就是我们看到的下拉弹出的内容了。...我调试了很久,包括重写 Thumb 的样式,修改 Thumb 的高度,都一直不生效,最后在官方文档 [2]How to: Customize the Thumb Size on a ScrollBar.../controls/how-to-customize-the-thumb-size-on-a-scrollbar?

    41320

    精通 WPF UI Virtualization

    TreeGrid 控件实现了很多新的功能,(之后会写一篇文章说明),但是最后遗留了一个问题:由于使用它替换了原来的 DataGrid,而 DataGrid 默认是支持 UI Virtualization 的,有些界面的数据量比较大...>     其中,为了实现在列表没有数据显示 “没有数据” 四个字,使用了一个 Grid 包含了一个 ItemsPresenter 以及一个 TextBlock。...原因其实也和 UIV 有关: 目前 WPF 中的控件在 Group 分组后是不支持 UI Virtualization 的,原因是 ScrollViewer.CanContentScroll 设置为...true ,模式由 Scroll By Pixel 变为 Scroll by Item。...《WPF - Virtualizing an ItemsControl》:文中指出,ItemsControl 默认不支持 UI Virtualization,原因是它的模板中没有一个 ScrollViewer

    2.4K90

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

    WPF事件引擎在处理控件对应事件,若检测到该属性为True,就不会调用相应的处理程序。...Grid_MouseDown(object sender, MouseEventArgs e) { MessageBox.Show("GridMouseDown事件"); } 2、自定义控件模板...在控件模版中,ScrollViewer的MouseButtonDown事件处理事件如下:断点设置会发现鼠标点击并不会触发。...事件visual tree上传递过程中,某个元素将该事件标记为已处理,导致事件在传递不再继续有响应,(原因:Handled被标记为True)如果希望后续元素也能响应此方法,可以使用此方法。...由此可见WPF路由事件被标记为handled以后,并不是不在visual tree上传递了;而是,不去call这个handler了。

    94610

    OEA 中 WPF 树型表格虚拟化设计方案

    默认为 False ,ScollViewer 自己实现了滚动逻辑,在 Measure 时会把 Infinite 传给 Content 元素;而该值被设置为 True,ScrollViwer 认为它的...实现 IScrollInfo 的 UIVPanel 与 ScrollViewer 交互的细节如下: * ScollViewer 会在滚动条变更,调用 UIVPanel 的 SetVerticalOffset...,通过视窗大小、当前 Offset,来生成新的需要显示的容器,并移除不可见的容器,最终达到虚拟化的效果。    ...所以列数较少时,则没有必要打开列虚拟化。目前暂时设定为,列数超过 50 的时候,该表格会自动打开列虚拟化功能,提升渲染性能。...而行虚拟化关闭后,由于列虚拟化实现的机制依赖最外层的 ScrollViewer,所以也被关闭。也就是说,暂时不能只打开列虚拟化,而不打开行虚拟化。

    2.7K70

    WPF中WrapPanel、StackPanel等添加滚动条ScrollViewer

    wpf中,在控件中直接设置ScrollViewer.HorizontalScrollBarVisibility和ScrollViewer.VerticalScrollBarVisibility属性,并不能显示滚动条...因为在wpf中,想要显示滚动条,需要把控件放在滚动条视图控件(ScrollViewer)中。...子控件的宽度大于StackPanel的宽度,就会出现水平滚动条。 子控件的高度大于StackPanel的高度,就会出现垂直滚动条。 一、WrapPanel应用举例。 1、显示水平滚动条。...=“Stretch”,即自适应ScrollerViewer的宽度,所以WrapPanel子控件会自动换行,超过父控件的高度,会显示垂直滚动条。...> 设置水平和垂直滚动条都自动显示的时候,如果想显示垂直滚动条,则需要设置Width=”{Binding ElementName=scrList, Path=Width, Mode=OneWay}”,

    5.4K20

    WPF中的布局方式

    它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面 WPF布局规则:wpf窗口只能包含单个元素,为在wpf窗口中放置多个元素,需要添加容器然后向容器中放置元素...height:为容器的高度 //HorizontalAlignment:水平对齐方式,VerticalAlignment:垂直对齐方式 //Background:背景色 2.Grid:根据不可见的表格在行和列中排列元素...RowDefinition/> //所以图中见到了4行3列 注:虽然说在xaml代码中划分了行和列但是线条不会在运行结果中显示...自身的宽高发生改变对其中的元素布局也会有影响,如下图:宽度变窄其会自动调节其中元素的布局方式 4.DockPanel:沿着一条外边缘来拉伸所包含的控件,也就类似于许多窗口顶部的工具栏:...5.StackPanel:和DockPanel类似都有拉伸作用: 默认情况下是水平拉伸,如果我们想垂直拉伸,可以加一下属性 Orientation="Horizontal" 6.ScrollViewer

    1.7K10

    XAML中的响应式布局技术

    在针对特定屏幕宽度优化应用 UI ,我们将此称为创建响应式设计。WPF设计之初响应式设计的概念并不流行,那时候大部分网页设计师都按着宽度960像素的标准设计。...而且和网页不同,WPF窗体默认没有提供ScrollViewer,所以千万不能忘记。在桌面客户端合理使用以上技术可以避免客户投诉。但UWP主打跨平台,它需要更先进(或者说,更激进)的技术。 2....响应式设计技术 微软的官方文档介绍了UWP中响应式设计常用的6个技术,包括重新定位、调整大小、重新排列、显示/隐藏、替换和重新构建,具体可见以下网站: ?...在下面的示例中StackPanel默认使用垂直排列,页面的宽度超过720像素改为水平排列。...在 Auto 模式下,导航视图会进行自适应,在窗口狭窄为 LeftMinimal,接下来为 LeftCompact,随后在窗口变宽为 Left。 ?

    2.3K10

    关于ScrollViewr和滚动轮劫持(scroll-wheel-hijack)

    实现 在WPF中要禁止ScrollViewer捕获鼠标滚动时间,可以重写OnMouseWheel成一个空的方法: protected override void OnMouseWheel(MouseWheelEventArgs...这里面用到几个属性: MouseWheelEventArgs中的Delta表示鼠标滚轮的变更量,这个值为正数表示滚轮向上。 ExtentHeight,获取ScrollViewer内容的实际高度。...熟悉了上面几个属性的作用后我们可以更好地控制鼠标滚轮的行为,当鼠标向上滚动,判断现在是否已经滚到顶了,如果是就不处理鼠标滚轮事件: if (VerticalOffset == 0 && e.Delta...>= 0) return; 而当鼠标向下滚动,需要根据ViewportHeight、VerticalOffset和ExtentHeight判断当前是否已经滚动到底,如果是就不处理鼠标滚轮事件...其他ScrollViewer方案 ScrollViewer还有很多中玩法,但我工作中不常用到所以就没做。

    1.3K30

    WPF 如何判断一个控件在滚动条的里面是用户可见

    昨天星期八再娶你 大佬问我如何判断在滚动条内可以看到某个元素,他需要在滚动条里面放一个视频播放器,在用户看不到这个播放器的时候自动停下这个播放器 在 WPF 可以通过 ScrollChanged 拿到当前的滚动到哪同时拿到滚动条可见的宽度和高度...ViewportHeightChange 属性知道滚动条的可视宽度和高度修改了多少 在用户修改滚动条里面的控件的宽度或高度的时候,可以从 ExtentWidthChange 等属性知道用户修改了多少 那么如果判断某个控件在滚动条可见内就可以拿到某个控件的外接矩形和滚动条可见大小进行矩形判断...e.ViewportHeight)); 判断 controlBounds 和 viewBounds 是否相交就可以知道用户是否可以看到这个控件,当然如果是想要判断用户可以完全看到这个控件,就是判断滚动条是否完全显示里面的控件...if (viewBounds.Contains(controlBounds)) { Debug.WriteLine("控件完全显示...> 我需要在歪楼的文本被用户看到的时候输出,于是我就在后台代码通过本文上面提供的方法拿到这个元素的矩形判断 private void ScrollViewer_OnScrollChanged

    93120

    WPF快速入门系列(1)——WPF布局概览

    二、WPF的自我介绍   Windows Presentation Foudation,WPF是下一代显示系统,用来生成能带给用户震撼视觉体验的Windows客户端应用程序。...其中,矩形的右边区域以溢出Canvas面板区域,如向右拉动边框,此时Canvas会拉伸以填满可用空间,此时就可以看到矩形溢出的部分。但Canvas面板内的控件不会改变其尺寸和位置。...缩小窗口大小时,对应的WrapPanel也会改变,从而改变WrapPanel面板中控件的排列,具体效果如下图所示: ?...第一种:固定长度——宽度不够,元素会被裁剪,单位是pixel;   第二种:自动长度——自动匹配行中最宽元素的高度。   ...3.8 ScrollViewer 控件   通常用户界面中的内容比计算机屏幕的显示区域大的时候,可以利用ScrollViewer控件可以方便地使应用程序中的内容具备滚动功能。

    2.5K20

    WPF 搬迁到 UOS 下的 UNO 的笔记

    本文记录我将一个小 WPF 应用搬迁到 UNO 框架,用于支持统信 UOS 系统开发经验 开始之前先说一下我的需求,我现在有一个小的 WPF 应用。...设置为微软雅黑可以让应用在 Windows 系统和 UOS 系统上都能显示正常的黑体字体 设置方法如下 () is { } scrollViewer) { scrollViewer.ChangeView(0.0f, scrollViewer.ExtentHeight...核心就是通过爬视觉树找到 ScrollViewer 对象,通过 ScrollViewer 控制滚动 几何图形 StreamGeometry 资源 在 WPF 里面,经常有图标使用的是 Path 几何路径...窗口的main线程空闲且队列中没有挂起的输入时,将处理委托。 Low -1 低优先级。 如果队列中没有更高的优先级事件挂起,则处理委托。 Normal 0 正常优先级。

    67410
    领券