删除所有其他像素行

时间:2018-06-13 19:47:43

标签: wpf

我只想显示UIElement的所有其他像素行(例如ImageTextBlock),因此每个偶数像素行的每个奇数最好是透明的(显示背景)或是纯色。在WPF中是否可以这样?

我希望你能理解我想做的事。

经过google搜索后我觉得OpacityMask是可行的方法,但我无法弄清楚如何以编程方式创建一个合适的掩码(我想避免对每个其他像素使用外部位图划船)。

1 个答案:

答案 0 :(得分:1)

你可以用刷子设置OpacityMask,这会使奇数/偶数行透明:

<VisualBrush x:Key="Blinds" 
             TileMode="Tile" 
             Viewport="0,0,10,2" ViewportUnits="Absolute"
             Viewbox ="0,0,10,2" ViewboxUnits="Absolute">
    <VisualBrush.Visual>
        <Grid Height="2" Width="10">
            <Grid.Background>
                <LinearGradientBrush EndPoint="0,1">
                    <GradientStop Color="Green" Offset="0.5"/>
                    <GradientStop Color="Transparent" Offset="0.5"/>
                </LinearGradientBrush>
            </Grid.Background>
        </Grid>
    </VisualBrush.Visual>
</VisualBrush>

用法(为简单起见使用Border):

<Border Background="Black" 
        UseLayoutRounding="True"
        OpacityMask="{StaticResource Blinds}" 
        Height="50"/>

要制作不透明的线条,请在应覆盖的元素顶部放置边框:

<Grid>
    <!--element to cover, e.g. Image, here-->

    <Border Background="Black" 
            UseLayoutRounding="True"
            OpacityMask="{StaticResource Blinds}" />
</Grid>