【问题标题】:In WPF, in MenuItem's template, if set Background in IsHighlighted trigger, then Background IsPressed trigger is invalid在WPF中,在MenuItem的模板中,如果在IsHighlighted触发器中设置了Background,那么Background IsPressed触发器是无效的
【发布时间】:2013-09-07 11:47:42
【问题描述】:

我希望 MenuItem 具有不同背景的 IsMouseOver 和 IsPressed 状态,但尝试几次后仍然失败。

【问题讨论】:

  • 您遇到什么问题...您无法应用效果吗?..请分享详细信息..如果可能的话您尝试过的代码

标签: wpf templates triggers styles menuitem


【解决方案1】:

SubmarineX.. 菜单由很多子控件组成.. 如果你想设置 Menuitems 的背景颜色.. 那么你需要定义 Out 菜单项以及内部菜单项的样式...

 <Grid>
    <Menu IsMainMenu="True">
        <Menu.Resources>
            <!-- Outermenu items-->
            <Style TargetType="{x:Type MenuItem}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Red" />
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" Value="Green" />
                    </Trigger>
                </Style.Triggers>
            </Style>

            <!-- Submenu items -->
            <ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}"
                 TargetType="{x:Type MenuItem}">
                <Border Name="Border">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" SharedSizeGroup="Icon" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut" />
                            <ColumnDefinition Width="13" />
                        </Grid.ColumnDefinitions>
                        <ContentPresenter Name="Icon" Margin="6,0,6,0" VerticalAlignment="Center" ContentSource="Icon" />
                        <Border Name="Check" Width="13" Height="13" Visibility="Collapsed" Margin="6,0,6,0" Background="#0f3c5a"
                                BorderThickness="1" BorderBrush="#5082a4">
                            <Path Name="CheckMark" Width="7" Height="7" Visibility="Hidden" SnapsToDevicePixels="False"
                                  Stroke="#5082a4" StrokeThickness="2" Data="M 0 0 L 7 7 M 0 7 L 7 0" />
                        </Border>
                        <ContentPresenter Name="HeaderHost" Grid.Column="1" ContentSource="Header" RecognizesAccessKey="True" />
                        <TextBlock x:Name="InputGestureText" Grid.Column="2" Text="{TemplateBinding InputGestureText}" 
                                   Margin="5,2,0,2" DockPanel.Dock="Right" />
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsHighlighted" Value="true">
                        <Setter TargetName="Border" Property="Background" Value="Yellow" />
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="Border" Property="Background" Value="Blue" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Menu.Resources>

        <MenuItem Header="_File">
            <MenuItem Header="_New"/>
            <MenuItem Header="_Open"/>
        </MenuItem>
        <MenuItem Header="_Edit">
            <MenuItem Header="_Cut">
                <MenuItem.Icon>
                    <Image Source="Images/cut.ico" Height="16" Width="16" />
                </MenuItem.Icon>
            </MenuItem>
            <MenuItem Header="_Copy">
                <MenuItem.Icon>
                    <Image Source="Images/copy.ico" Height="16" Width="16" />
                </MenuItem.Icon>
                <MenuItem Header="_Y"/>
                <MenuItem Header="_X"/>
            </MenuItem>
            <MenuItem Header="_Paste">
                <MenuItem.Icon>
                    <Image Source="Images/paste.ico" Height="16" Width="16" />
                </MenuItem.Icon>
            </MenuItem>
        </MenuItem>
        <MenuItem Header="_View" />
        <MenuItem Header="_Window" />
        <MenuItem Header="_Help" />
    </Menu>
</Grid>

如果您还想设置菜单标题的样式,那么您还需要为 MenuItem.SubmenuItemTemplateKey 定义样式......希望这会有所帮助......

【讨论】:

  • 谢谢你,就像效果一样。嗯,我想我应该花一些时间来理解它。
【解决方案2】:

尝试使用这种风格

<Window.Resources>
    <Style TargetType="{x:Type MenuItem}">
        <Setter Property="Background" Value="Red"></Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Green"></Setter>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" Value="Blue"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

【讨论】:

  • Menu -L Menuitem1 -L MenuItem2,如果在Menuitem2上leftmousedown,则背景不变。
猜你喜欢
  • 2015-08-17
  • 2014-03-13
  • 2016-05-02
  • 2017-06-19
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多