我需要创建一个 UserControl,它有一部分控件的背景是透明的。透明部分被切割成 CornerRadius 为 2 的边框形状——这是设计所必需的。
这是我的代码不起作用:
<UserControl Margin="1" x:Name="Box">
<UserControl.Resources>
<Style TargetType="UserControl">
<Setter Property="Height" Value="16" />
</Style>
</UserControl.Resources>
<Grid>
<Border CornerRadius="2" BorderThickness="0">
<Border.Background>
<SolidColorBrush Color="Black" Opacity=".3" />
</Border.Background>
<Border.OpacityMask>
<VisualBrush>
<VisualBrush.Visual>
<Grid
Background="Black"
Width="{Binding ElementName=Box, Path=ActualWidth}"
Height="{Binding ElementName=Box, Path=ActualHeight}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Grid.Column="1" Margin="1" CornerRadius="2" Background="Transparent" BorderThickness="0" />
</Grid>
</VisualBrush.Visual>
</VisualBrush>
</Border.OpacityMask>
</Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock
VerticalAlignment="Center" TextAlignment="Right" FontSize="10" Margin="2"
Foreground="White" Text="Property" />
<TextBlock
Grid.Column="1" VerticalAlignment="Center" TextAlignment="Center" FontSize="10" Margin="2"
Text="Value" />
</Grid>
</Grid>
</UserControl>
我做了一些更改,所以你们应该能够将它直接放入 XamlPad。
出于某种原因,设置为边框的 OpacityMask 的 VisualBrush 根本无法正常工作。OpacityMask 只是显示完全可见的所有内容。为了进行测试,我将一个快速的 LinearGradientBrush 放入其中,它按预期工作。
一起使用 VisualBrush 和 OpacityMask 有问题吗?这里出了什么问题?
这是我想要实现的截图:
截图 http://monitor.utopiaselfscan.com/Screen.png
UserControl 是表示实体编号、进度、小时数等的标题。它们是黑色的,透明度为 30%,并且有一个圆角矩形不透明蒙版切口。我通常使用图像来渲染这样的东西,b/c 我们的图形艺术家可能会因为玻璃效果而疯狂。