0

私はWPFに比較的慣れていないので、メニュー項目のホバー効果を変更して、ツールバーのボタンと同じように設定しようとしています。

おそらくMenuItemからメニューにカーソルを合わせると、二重の境界線が残ります。どうすれば削除できますか?

XAML ファイル:

     <ToolBarTray Style="{StaticResource MainToolBar}">
            <ToolBar DockPanel.Dock="Top" ToolBarTray.IsLocked="True" Width="Auto" Padding="0" Background="Transparent" Name="Tool">
                <Button Content="Button 1"/>
                <Button Content="Button 2"/>
                <Separator/>
                <Menu Margin="0, -1, 0, 0" Style="{StaticResource Menu}">
                    <MenuItem Header="Menu">
                        <MenuItem Header="File">
                            <MenuItem Header="Copy"/>
                            <MenuItem Header="Paste"/>
                        </MenuItem>
                    </MenuItem>
                </Menu>
            </ToolBar>
           </ToolBarTray>

リソース ファイル:

    <Style x:Key="{x:Static ToolBar.ButtonStyleKey}" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border
                SnapsToDevicePixels="true"
                Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                Padding="{TemplateBinding Padding}">
                    <ContentPresenter
                     HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                     VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                     SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="BorderBrush" Value="Orange"/>
                        <Setter Property="Background" Value="{DynamicResource ToolBarBKHover}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style x:Key="Menu" TargetType="{x:Type Menu}">
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Menu}">
                <Border
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <StackPanel ClipToBounds="True" Orientation="Horizontal" IsItemsHost="True"/>
                </Border>

            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="BorderBrush" Value="Orange"/>
                    <Setter Property="Background" Value="{DynamicResource ToolBarBKHover}"/>
                </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>

        </Setter.Value>
    </Setter>
</Style>
4

2 に答える 2

1

「二重枠」の問題はメニューレベルでは解決できません。さらに掘り下げて、メニューの MenuItem のテンプレート/トリガーを再定義する必要があります。MenuItem (ではありませんMenu )には、 MouseOver で境界線の色を灰色に変えるデフォルトの動作があり、それを変更したいものです。

編集 : たとえば、BorderWidth = 0 のセッターを使用して、MenuItem のデフォルト スタイルを定義できます。

于 2012-07-23T14:50:57.350 に答える
0

にメニュー項目がありListbox、マウスの上に移動すると色を変えたいとしましょう。これを行う簡単な方法は次のとおりですが、既存のプロジェクトからコードをコピーしました。

<Window.Resources>
<Style TargetType="{x:Type ListBox}">
  <Setter Property="Foreground" Value="#58290a" />
  <Setter Property="FontFamily" Value="Lucida Console" />
  <Setter Property="Background">
    <Setter.Value>
      <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
        <LinearGradientBrush.GradientStops>
          <GradientStop Color="#feca00" Offset="0.1"/>
          <GradientStop Color="#ffe100" Offset="0.4"/>
          <GradientStop Color="#feca00" Offset="0.6"/>
          <GradientStop Color="Orange" Offset="0.9"/>
        </LinearGradientBrush.GradientStops>
      </LinearGradientBrush>
    </Setter.Value>
  </Setter>
  <Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="BitmapEffect">
        <Setter.Value>
          <OuterGlowBitmapEffect GlowColor="Red" GlowSize="4"/>
        </Setter.Value>
      </Setter>
    </Trigger>
  </Style.Triggers>
</Style>

お役に立てれば

于 2012-07-23T13:01:58.203 に答える