不透明度以wpf遮罩图像

时间:2020-03-31 16:10:17

标签: wpf opacitymask

我尝试通过此xaml为wpf中的图像制作不透明蒙版:

<Border x:Name="border1" Margin="20" BorderThickness="2" BorderBrush="Red" CornerRadius="50" >
    <Grid>
        <Border Background="Wheat" x:Name="border2" CornerRadius="50"/>
        <Image Margin="0" Source="Images/SpiderMan.png" Stretch="Fill">
            <Image.OpacityMask>
                <VisualBrush Visual="{Binding ElementName=border2}"/>
            </Image.OpacityMask>
        </Image>
    </Grid>
</Border>

这个xaml可以正常工作并且很好,但是当我将 Elementname 更改为 border1 时,这行不通吗?为什么会这样?

已编辑(另一个问题):

在xaml中,直到我设置了 Background 属性后,图片才会显示 border2 ,但是这会发生吗?为什么没有背景属性图片就不显示?

1 个答案:

答案 0 :(得分:-1)

Border1无法分配给VisualBrush,因为它是父控件。如果将允许这种绑定..您将面临巨大的递归和stackoverflow异常。下一个XAML保留工作

<Grid>
     <Border x:Name="border1" Margin="20" BorderThickness="2" BorderBrush="Red" CornerRadius="50" />
    <Grid>
        <Border Background="Wheat" x:Name="border2" CornerRadius="50"/>
        <Image Margin="0" Source="Images/SpiderMan.png" Stretch="Fill">
            <Image.OpacityMask>
                <VisualBrush Visual="{Binding ElementName=border1}"/>
            </Image.OpacityMask>
        </Image>
    </Grid>
</Grid>