0

カスタムのWPFドロップダウンメニューを作成したいので、ToggleButtonとPopupコントロールを含むUserコントロールを作成しました。ボタンをクリックするとポップアップが表示されます。ポップアップのメニュー項目にマウスホバー効果を追加したいのですが、LinearGradientBrushがアルファチャネルで機能していません。

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

GradientBrushをこれに設定すると、すべてが正常に機能します。

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

しかし、アルファチャネルはすべてを壊しているようで、私が見ているのは黒い長方形です。...何か案が?

MenuItemsをMenuコンテナー内に配置すると、Menuがスタイルをオーバーライドします...

前もって感謝します!

4

1 に答える 1

1

have you set AllowsTransparency to true?

于 2012-07-19T10:29:55.317 に答える