如何移除WPF ScrollViewer的边框

3
在我正在开发的WPF应用程序中,每个ScrollViewer控件都会在其显示的内容周围放置一个白色边框,而我需要移除此边框。即使使用我的自定义样式,该边框也仍然存在。
唯一不显示它的时候是当我为窗口启用AllowTransparency时,但必须保持AllowTransparency禁用 - 窗口是无边框且没有chrome,我应用必要的投影阴影的方式需要AllowTransparency为false。

它看起来像: enter image description here

这是右上角的特写图像: 输入图像描述 四个换行符后面的那个讨厌的白色边框破坏了我的应用程序外观,需要去掉。我不认为它是另一个元素的背景透过来显示的,因为我已经将几乎所有父元素的背景设置为非白色或透明颜色,但它仍然显示。如何在保持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


1
ScrollViewer 的内容是什么? ScrollViewer 的背景属性设置为什么?您能创建一个非常简单的 XAML 页面来演示问题并发布该 Xaml 代码吗?我创建了一个简单的窗口,其中包含一个 Grid,我将一个 ScrollViewer 放入其中。我在 ScrollViewer 上设置的唯一属性是设置了 10 的边距和 LightBlue 的背景。然后我在 'ScrollViewer' 中放置了一个 Canvas。我没有在我的窗口上看到任何白色边框。 - Chris Dunaway
这个UserControl包含一个受影响的ScrollViewer: https://hastebin.com/okudoyubal.xml,并且是这个UserControl的子级:https://hastebin.com/esiregapem.xml。 - TiberiumFusion
我正在使用一个略微修改过的Metro样式主题来选择组件:http://www.mediafire.com/file/xjawcacw3gzk435/ModMetroTheme.zip,这里是ScrollViewer特定的样式:https://hastebin.com/uvulihekex.xml。然而,奇怪的是,白色边框出现在Metro ScrollViewers和默认Win 7 ScrollViewers中。 - TiberiumFusion
@SledgeHammer 先生,我知道我的解决方法很奇怪。这就是为什么我称它为“解决方法”的原因。我也知道这可能是一个样式问题。但当一个问题已经持续了几周(看一下这个问题的日期只需要一秒钟),而且一个人已经花费了数小时寻找解决方案,实施一个解决方法以便主要开发可以再次继续进行是完全可以接受的;然后,在更好的条件下可以研究一个适当的解决方案。您粗鲁的评论没有帮助,反而激怒了我。 - TiberiumFusion
默认的win7滚动视图没有边框,所以你在某个地方进行了覆盖。不要禁用样式,而是直接复制默认样式并强制使用它。你将看到没有边框。还可以尝试一个没有自定义样式的股票应用程序来证明这一点。 - SledgeHammer
显示剩余7条评论
2个回答

2

这可能因控件而异,但我可以通过 ScrollViewer 包含的控制中使用 BorderThinkness="0" 来实现。

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


0

我学了一些东西并找到了一个解决方法。单元格之间的白色边框是 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的盒状模糊可消除单元格之间的透明边距。此外,就我所知,该效果不会导致明显的性能损失。

也许模糊效果本质上需要透明度,并且其引入使得混淆的网格实际上具有透明的单元格边框。


如果有人有办法完全去掉这个单元格边框的解决方案,那仍然是非常好的听到!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接