在自定义 UserControl 上强制透明背景

Posted

技术标签:

【中文标题】在自定义 UserControl 上强制透明背景【英文标题】:Force transparent background on custom UserControl 【发布时间】:2020-03-15 10:07:28 【问题描述】:

我想创建一个新的 UserControl 并重新路由 Background 属性以在 UserControl.Background 属性之外的其他地方使用它(例如在复选框上完成)。

这是一个简单的自定义用户控件:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:Controls"
         xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing" 
         x:Class="Controls.HexagonalTile"
         mc:Ignorable="d" d:DesignWidth="300" d:DesignHeight="300">
<Grid>
    <ed:RegularPolygon Fill="Binding ElementName=LayoutRoot, Path=Background" StrokeThickness="5" Stroke="Black"/>
</Grid>

我想这样使用它:

<Controls:HexagonalTile HorizontalAlignment="Left" Height="100" Width="100" Background="Aqua" />

但是当我这样做时,我的用户控件的角落,在六边形之外,也会采用背景颜色。我希望他们保持透明。

感谢您的帮助。

【问题讨论】:

LayoutRoot 元素在哪里定义? 【参考方案1】:

发生这种情况的原因是UserControl 的默认ControlTemplate 具有BorderTemplateBindingBackground 属性。

但是,您可以像这样重新模板化控件以实现您的目标:

<UserControl x:Class="WpfApp4.HexagonalTile"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing">
    <UserControl.Template>
        <ControlTemplate TargetType="x:Type UserControl">
            <Grid>
                <ContentPresenter />
            </Grid>
        </ControlTemplate>
    </UserControl.Template>
    <Grid>
        <ed:RegularPolygon
            Fill="Binding Background, RelativeSource=RelativeSource AncestorType=x:Type UserControl"
            Stroke="Black"
            StrokeThickness="5" />
    </Grid>
</UserControl>

我希望这会有所帮助!

【讨论】:

谢谢,这完全符合我的预期。但我为什么要更换填充绑定?是不是因为“LayoutRoot”是在默认模板中定义的,因为我们重新定义了默认模板而不再存在? 是的。此外,您不能总是依赖其他人定义的控件名称。他们可以改变。我喜欢对我的绑定非常具体。在这种情况下,我想绑定到UserControlBackground 属性。

以上是关于在自定义 UserControl 上强制透明背景的主要内容,如果未能解决你的问题,请参考以下文章

css怎么可以只让背景透明 文字不透明

透明居然可以透部分背景色过来

带有非透明子视图的 iOS 8 透明视图

CSS中为啥我设置了背景为半透明,连字体都透明了

CSS中为啥我设置了背景为半透明,连字体都透明了

WinForm窗体,在VS2010上背景颜色不能设置透明,我把背景颜色和TransparencyK