【问题标题】:How to Remove WPF ScrollViewer Border如何删除 WPF ScrollViewer 边框
【发布时间】:2016-12-22 22:12:39
【问题描述】:

在我正在开发的 WPF 应用程序中,每个 ScrollViewer 控件都会在其显示的内容周围放置一个白色边框,我需要移除此边框。边框在有和没有我的自定义样式时都存在。
唯一不显示的是当我为我的窗口启用 AllowTransparency 时,但 AllowTransparency 必须保持禁用状态 - 窗口是无边框的,没有镶边,我的方式是m 应用必要的投影需要 AllowTransparency 为 false。

它的样子:

这是右上角的特写:



那个令人讨厌的白色边框破坏了我的应用程序的外观,需要删除。我不相信它是另一个元素的背景,因为我已经将几乎每个父元素的背景设置为非白色或透明颜色并且它仍然显示。如何在禁用 AllowTransparency 并保留无铬窗口的同时删除有问题的边框?



澄清代码:此 UserControl 包含一个受影响的 ScrollViewer:hastebin.com/okudoyubal.xml 并且是此 UserControl 中的一个子项:hastebin.com/esiregapem.xml
使用稍微修改的 Metro 主题:http://www.mediafire.com/file/xjawcacw3gzk435/ModMetroTheme.zip
这里是特定的 ScrollViewer 样式:https://hastebin.com/uvulihekex.xml

【问题讨论】:

  • ScrollViewer的内容是什么? ScrollViewer Background 属性设置为什么?您能否创建一个非常简单的 XAML 页面来演示该问题并发布该 Xaml 代码。我创建了一个带有Grid 的简单窗口,并在其中放置了ScrollViewer。我在ScrollViewer 上设置的唯一属性是将边距设置为 10,背景设置为 LightBlue。然后我在“ScrollViewer”中放置了一个Canvas。我的 Window 上没有看到任何白色边框。
  • 此 UserControl 包含一个受影响的 ScrollViewer:hastebin.com/okudoyubal.xml,并且是此 UserControl 中的一个子项:hastebin.com/esiregapem.xml
  • 我复制了您的代码,没有看到白色边框,但滚动条看起来也不同。您在这里应用了任何样式吗?你也可以发布它,也许它是导致边框的原因。
  • 我对选择的组件使用了一个稍微修改过的类似 Metro 的主题:mediafire.com/file/xjawcacw3gzk435/ModMetroTheme.zip,这是 ScrollViewer 的特定样式:hastebin.com/uvulihekex.xml 奇怪的是,白色边框同时出现在 Metro ScrollViewers 和默认的 Win 7 ScrollViewers
  • 我和 lena 在一起,我复制了你的代码,但没有看到任何白色边框。你的模糊技巧对我来说似乎完全错误。您有一些引入该边框的样式。找到并正确修复它,而不是模糊不清。

标签: c# wpf controls scrollviewer


【解决方案1】:

它可能因控件而异,但我可以使用 BorderThinkness="0" in ScrollViewer 包含的控件来实现。

注意:我写了这个答案是因为这种方法似乎没有尝试过。该操作的 hastbin.com 链接现在无法访问。

【讨论】:

    【解决方案2】:

    我学到了更多知识并找到了解决方法。单元格之间的白色边框是 ScrollViewer 的网格背景。或者更确切地说,缺乏背景。虽然它被设置为透明,但它决定改为不透明,这可以通过更改网格的背景颜色来廉价地解决。但是,这样做很笨拙,因为每个 ScrollViewer 和其他使用 Grid 的元素现在都具有纯色背景,或者每个都必须手动设置(可能会破坏单元格边框无论如何都不会显示的网格)。

    虽然以下解决方法在我的应用程序的每个地方都不起作用,但它适用于某些地方:

    <Style x:Key="ScrollViewerStyle" TargetType="{x:Type ScrollViewer}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                    <Grid Background="{x:Null}" SnapsToDevicePixels="True" UseLayoutRounding="True">
                        <Grid.Effect>
                            <BlurEffect KernelType="Box" Radius="0"/>
                        </Grid.Effect>
    
                        // Content
    
                    </Grid>
                ...
    

    将背景设置为透明、对齐像素、使用布局舍入、应用 0 的框模糊会删除单元格之间的透明边距。此外,据我所知,这种效果并没有明显的性能损失。

    也许模糊效果本质上需要透明度,并且它的引入欺骗了困惑的网格实际上具有透明的单元格边框。


    如果有人有完全移除此单元格边框的解决方案,那仍然很高兴!

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 2017-03-07
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2019-10-16
      相关资源
      最近更新 更多