【问题标题】:Opacity mask an image in wpf [closed]不透明度遮罩wpf中的图像[关闭]
【发布时间】:2020-04-01 02:58:49
【问题描述】:

我尝试通过这个 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 但这是怎么回事?为什么没有背景属性图片不显示?

【问题讨论】:

  • 在这种情况下,“work”究竟是什么意思?
  • @Clemens 通过运行应用程序,将显示图像
  • @Clemens 不,我在border1 中定义了一个角半径,当我添加图像时,添加的图像没有圆角。通过定义 opacitymask 我想让图像角变圆。

标签: wpf opacitymask


【解决方案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>

【讨论】:

  • 请详细描述允许此类数据绑定的场景中的递归。
  • VisualBrush 需要渲染控件。来自另一侧的父控件依赖于具有此类画笔的内容。那么你怎么看...视觉属性会改变多少次?
  • 请查看有问题的编辑部分:)
  • 这也是预期的.. 如果没有背景,则不会渲染border2.. VisualBrush 是透明的..它被转换为透明不透明度。
  • 感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2017-02-02
  • 2020-04-27
相关资源
最近更新 更多