WPF:LinearGradientBrush with Alpha 在 Popup 控件中不起作用



我想创建一个自定义的WPF下拉菜单,所以我创建了一个包含切换按钮和一个弹出控件的用户控件。当我单击按钮时,弹出窗口出现。现在我想在弹出窗口中的菜单项上添加鼠标悬停效果:但是 LinearGradientBrush 不适用于 alpha 通道:

<UserControl.Resources>
    ...
    <Style x:Key="SubMenuItemStyle" TargetType="{x:Type MenuItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="MenuItem">
                    <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" ClipToBounds="True">
                        <Rectangle x:Name="rectangle" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                               Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}"
                               Fill="{TemplateBinding Background}" />
                        <StackPanel>
                            <TextBlock x:Name="text" Text="{TemplateBinding Header}" Foreground="{TemplateBinding Foreground}" />
                        </StackPanel>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Stroke" TargetName="rectangle" Value="#30000000"/>
                            <Setter Property="Fill" TargetName="rectangle">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,0" StartPoint="1,1">
                                        <GradientStop Color="#10000000" Offset="0"/>
                                        <GradientStop Color="#10FFFFFF" Offset="1"/>
                                        <!-- Not works... -->
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Foreground" TargetName="text" Value="#FF9A9A9A"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<Grid>
    <Controls:ToggleImageButton Style="{DynamicResource ArrowMenuStyle}" x:Name="imageButton" Height="21" />
    <Popup x:Name="popup" PlacementTarget="{Binding ElementName=imageButton}" Placement="Bottom" StaysOpen="False" IsOpen="{Binding ElementName=imageButton, Path=IsChecked}">
        <ItemsControl ItemsSource="{Binding MenuCommands}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding Name}" Command="{Binding Command}" Background="{Binding ElementName=popupMenuControl, Path=MenuBackground}" Foreground="{Binding ElementName=popupMenuControl, Path=MenuForeground}"  Click="MenuItem_Click" Style="{StaticResource SubMenuItemStyle}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Popup>
</Grid>

当我将渐变画笔设置为这个时,一切正常:

    <LinearGradientBrush EndPoint="0,0" StartPoint="1,1">
              <GradientStop Color="Green" Offset="0"/>
              <GradientStop Color="Yellow" Offset="1"/>
    </LinearGradientBrush>

但似乎阿尔法通道打破了整个事情,我看到的是一个黑色矩形。...知道吗?

如果我将菜单项放在菜单容器中,菜单将覆盖我的样式...

提前感谢!

您是否将

AllowsTransparency设置为true

相关内容

  • 没有找到相关文章

最新更新