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

Force transparent background on custom UserControl

我想创建一个新的 UserControl 并重新路由背景 属性 以在 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" />

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

感谢您的帮助。

发生这种情况的原因是因为 UserControl 的默认 ControlTemplate 有一个 BorderBackground TemplateBinding 属性.

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

<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>

希望对您有所帮助!