- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在不使用滚动条的情况下为触摸屏应用程序创建自定义滚动查看器控件。为了让用户知道他们可以滚动内容,我使用 opacitymask 以线性渐变淡化滚动查看器的底部和顶部。这一切都很好,除了应用于文本块和滚动查看器的不透明掩码的问题!
我的意思是,我希望淡入淡出效果适用于滚动查看器的顶部 1% 和底部 1%,然后滚动查看器的中间将可见。然而,问题是,即使我在文本块上设置了 OpacityMask="{x:Null}",这种效果也会发生在滚动查看器中的控件上。
我也尝试将 opacitymask 应用到滚动查看器的外部,但发生了同样的问题。 Opacitymask 属性是否也适用于 child ?有没有更好的方法来实现这种褪色效果?
这是我正在使用的代码:
<Grid Width="200" Height="130">
<ScrollViewer BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="2"
HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Hidden" >
<ScrollViewer.OpacityMask>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="Transparent" Offset="0" />
<GradientStop Color="Black" Offset="0.1" />
<GradientStop Color="Black" Offset="0.9" />
<GradientStop Color="Transparent" Offset="1" />
</LinearGradientBrush>
</ScrollViewer.OpacityMask>
<TextBlock Margin="0,10" Style="{StaticResource textSmall}" TextWrapping="Wrap">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
</TextBlock>
</ScrollViewer>
</Grid>
最佳答案
我知道这是一个较旧的问题,但我遇到了这个问题,因为我试图做类似的事情;所以我想我会为下一个人发布我的解决方案。对我的解决方案的任何反馈表示赞赏。
在我们的应用程序中,我们的大多数 ScrollViewer 控件都位于非滚动纹理的顶部,因此我们希望可滚动内容在 ScrollViewer 的边缘淡入该背景,但前提是该方向有更多内容。此外,我们至少有一个 2 轴可滚动区域,用户可以在其中向各个方向平移。它也必须在这种情况下工作。我们的应用程序也没有真正的滚动条,但我已经把它排除在我在这里提出的解决方案之外(它不会影响解决方案)。
此解决方案的特点:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Effects;
namespace ScrollViewerTest
{
public class FadingScrollViewer : ScrollViewer
{
private const string PART_SCROLL_PRESENTER_CONTAINER_NAME = "PART_ScrollContentPresenterContainer";
public double FadedEdgeThickness { get; set; }
public double FadedEdgeFalloffSpeed { get; set; }
public double FadedEdgeOpacity { get; set; }
private BlurEffect InnerFadedBorderEffect { get; set; }
private Border InnerFadedBorder { get; set; }
private Border OuterFadedBorder { get; set; }
public FadingScrollViewer()
{
this.FadedEdgeThickness = 20;
this.FadedEdgeFalloffSpeed = 4.0;
this.FadedEdgeOpacity = 0.0;
this.ScrollChanged += FadingScrollViewer_ScrollChanged;
this.SizeChanged += FadingScrollViewer_SizeChanged;
}
private void FadingScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (this.InnerFadedBorder == null)
return;
var topOffset = CalculateNewMarginBasedOnOffsetFromEdge(this.VerticalOffset); ;
var bottomOffset = CalculateNewMarginBasedOnOffsetFromEdge(this.ScrollableHeight - this.VerticalOffset);
var leftOffset = CalculateNewMarginBasedOnOffsetFromEdge(this.HorizontalOffset);
var rightOffset = CalculateNewMarginBasedOnOffsetFromEdge(this.ScrollableWidth - this.HorizontalOffset);
this.InnerFadedBorder.Margin = new Thickness(leftOffset, topOffset, rightOffset, bottomOffset);
}
private double CalculateNewMarginBasedOnOffsetFromEdge(double edgeOffset)
{
var innerFadedBorderBaseMarginThickness = this.FadedEdgeThickness / 2.0;
var calculatedOffset = (innerFadedBorderBaseMarginThickness) - (1.5 * (this.FadedEdgeThickness - (edgeOffset / this.FadedEdgeFalloffSpeed)));
return Math.Min(innerFadedBorderBaseMarginThickness, calculatedOffset);
}
private void FadingScrollViewer_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.OuterFadedBorder == null || this.InnerFadedBorder == null || this.InnerFadedBorderEffect == null)
return;
this.OuterFadedBorder.Width = e.NewSize.Width;
this.OuterFadedBorder.Height = e.NewSize.Height;
double innerFadedBorderBaseMarginThickness = this.FadedEdgeThickness / 2.0;
this.InnerFadedBorder.Margin = new Thickness(innerFadedBorderBaseMarginThickness);
this.InnerFadedBorderEffect.Radius = this.FadedEdgeThickness;
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
BuildInnerFadedBorderEffectForOpacityMask();
BuildInnerFadedBorderForOpacityMask();
BuildOuterFadedBorderForOpacityMask();
SetOpacityMaskOfScrollContainer();
}
private void BuildInnerFadedBorderEffectForOpacityMask()
{
this.InnerFadedBorderEffect = new BlurEffect()
{
RenderingBias = RenderingBias.Performance,
};
}
private void BuildInnerFadedBorderForOpacityMask()
{
this.InnerFadedBorder = new Border()
{
Background = Brushes.Black,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
VerticalAlignment = System.Windows.VerticalAlignment.Stretch,
Effect = this.InnerFadedBorderEffect,
};
}
private void BuildOuterFadedBorderForOpacityMask()
{
byte fadedEdgeByteOpacity = (byte)(this.FadedEdgeOpacity * 255);
this.OuterFadedBorder = new Border()
{
Background = new SolidColorBrush(Color.FromArgb(fadedEdgeByteOpacity, 0, 0, 0)),
ClipToBounds = true,
Child = this.InnerFadedBorder,
};
}
private void SetOpacityMaskOfScrollContainer()
{
var opacityMaskBrush = new VisualBrush()
{
Visual = this.OuterFadedBorder
};
var scrollContentPresentationContainer = this.Template.FindName(PART_SCROLL_PRESENTER_CONTAINER_NAME, this) as UIElement;
if (scrollContentPresentationContainer == null)
return;
scrollContentPresentationContainer.OpacityMask = opacityMaskBrush;
}
}
}
<local:FadingScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" Margin="10" FadedEdgeThickness="20" FadedEdgeOpacity="0" FadedEdgeFalloffSpeed="4">
<local:FadingScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid x:Name="Grid" Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border x:Name="PART_ScrollContentPresenterContainer">
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="{TemplateBinding Padding}" Grid.Row="0"/>
</Border>
<ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
<ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
</Grid>
</ControlTemplate>
</local:FadingScrollViewer.Template>
<!-- Your content here -->
</local:FadingScrollViewer>
关于wpf - Scrollviewer 边缘模糊效果,opacitymask 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1901709/
我有一串数字。我需要检查边缘上的数字是否对称,这意味着它们以 2 为模时具有相同的余数。 我已经编写了一个有效的代码,但我对此感到不安,在一些失败之后我想出了这个代码: int PaliPair(ch
我要删除黑色蒙版和人体图像之间的白色边框 图像输入示例: 厚度为1的图像输出: 厚度为2的图像输出: 我尝试了一些在这里找到的具有模糊和阈值的游戏 我还使用此代码查找和绘制轮廓 thickne
这应该是一个在用户悬停时打开的飞出菜单。 这在 Chrome 中工作得很好,我已经尝试了多种方法(使用 CSS :hover,(mousenter)和(mouseleave ) 问题是 - 使用 Ed
我有一个 Apache 服务器 v2.4.43 为我的网站提供服务,我使用一个简单的 .htpasswd,我使用指令“AuthUserFile ”在 .htaccess 中调用它来进行身份验证。 现在
如何仅使用剪辑路径创建波浪边缘? 波浪应该是这样的图像: 最佳答案 您应该通过波函数及其频率生成此剪辑路径。 我用过 cos()在 PHP 中。您可以找到如下链接: https://repl.it/@
我有这张图: digraph G { 1 [label="car"]; 2 [label="x"]; 3 [label="car"]; 4 [label="y"]; 5 [label="cdr"];
我想强制点仅显示节点之间的垂直或水平边缘。 我在帖子 Family tree layout with Dot/GraphViz 中发现了类似的请求,但我不处理树,所以我希望有一个解决方案,无需插入额外
我已经设法让两个直方图重叠,但如果你仔细观察,条形开始倾斜并且没有完全重叠。 我已经调整了线宽和宽度,并没有改善。 我的目标是让所有的条形排列在彼此的顶部,黑边没有歪斜。 有什么办法解决这个问题 这是
我已经设法让两个直方图重叠,但如果你仔细观察,条形开始倾斜并且没有完全重叠。 我已经调整了线宽和宽度,并没有改善。 我的目标是让所有的条形排列在彼此的顶部,黑边没有歪斜。 有什么办法解决这个问题 这是
我一直在与 latex table 搏斗太久了。我需要一个具有居中标题的表格,以及包含可能环绕的文本的正文单元格。由于环绕要求,我使用 p{xxx} 而不是 l 来指定单元格宽度。这导致的问题是单元格
有没有办法平滑转换(平移和旋转)的 BufferedImage 的锯齿状边缘? 测试图像的放大 View : (请注意,这不是将要使用的实际 BufferedImage,仅用于此处演示)。 已使用双线
我在 my page 有一个旋转木马.我的父元素和子元素的边缘都是 flex 的,但是当您按“下一个”或“上一个”并滑动旋转木马时,子元素在移动时不会保持 flex 。我怎样才能避免这种情况? .ho
我在 .boxwrap 和 .lsmlbox + .rsmlbox 之间的嵌套 div 中添加了不必要的空格,这使得无法将 .smlbox + .rsmlbox 与 .box 对齐我相信这是一个比预期
我正在使用 Apple 的 ARKit 制作 AR 应用程序,我想制作盒子的线框轮廓。代码中描述并显示在图片中的那个在盒子的每个面上绘制斜边。它还隐藏了盒子另一侧的角。 Scene Kit 中有没有办
下图仅包含阈值处理后的黑色和白色像素。我在此图像的顶部绘制了一个灰色的旋转矩形。现在我想计算这个旋转矩形内的黑色像素数,但不包括白色矩形矩形外的黑色像素(即白色矩形内的像素数)。 做到这一点的最佳方法
你们如何处理边际 CSS?我所说的边缘是指需要斜体或粗体的单个单词或短语。只用 声明一个“大胆”的类似乎很愚蠢 Bold { font-weight: bold; } 或者斜体,要么! Italic
好的。我知道有几十个类似的线程。我几乎检查了每一个,但找不到可行的解决方案。我试过负边距、最小高度、最大高度、绝对页脚、正文背景颜色,甚至将溢出:隐藏到页面中的所有主要容器。然后将 clearfix
我网站的一部分使用代码使用倾斜边缘: -webkit-clip-path: 多边形(0% 0%, 100% 0%, 81% 100%, 0% 100%) 这在 Chrome 中运行良好,但不适用于任何
我一直在创建这个网站,并且进展顺利。然后我试着给它添加一个模态,但一切都有点走下坡路。问题是在添加模式后,Chrome 中的图像对齐方式发生了变化。它在 Edge 中运行良好。现在我知道这可能是因为
如果我在 Matlab 中使用 image() 命令制作一个 4 x 4 像素的图像,它会将刻度线居中放置在像素的中间。我希望刻度线以像素的左下角为中心。有什么方法可以做到这一点吗? 最佳答案 您可以
我是一名优秀的程序员,十分优秀!