【发布时间】:2015-10-04 07:23:44
【问题描述】:
我有一个菜单,其中包含嵌套的菜单项,当将鼠标悬停在主菜单起点上时会打开菜单结构。但是,我们最近将菜单从 Silverlight 应用程序的底部移到了页面顶部,当将鼠标悬停在起始菜单点上时,我似乎找不到更改打开方向的方法。
目前,它在起始菜单点上方打开,我需要在它下方打开菜单。
<StackPanel x:Name="ToolbarLogo" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" Background="{StaticResource ToolbarBackgroundBrush}" Orientation="Horizontal">
<viblend:Menu Visibility="Visible" Canvas.ZIndex="99" Orientation="Horizontal" VerticalAlignment="Bottom" AnimationType="Bounds" x:Name="MenuLogo" Margin="25,0,0,0" Style="{StaticResource ThemeMenuStyle}" HorizontalAlignment="Left" Padding="5,0,5,0">
<viblend:MenuItem Width="129" DropDownWidth="125" FontSize="11" HorizontalAlignment="Center" VerticalAlignment="Bottom" Style="{StaticResource ThemeMenuItemStyle}" Padding="10,5,5,5">
<viblend:MenuItem.HeaderTemplate>
<DataTemplate>
<Grid>
<Image Source="/ReACTSL;component/Assets/Images/Icons/ReACTLogoPlus.png" Width="100" Height="30"/>
</Grid>
</DataTemplate>
</viblend:MenuItem.HeaderTemplate>
<viblend:MenuItem Tag="ReACTHome" x:Name="mi_ReACTHomeM" Width="125" FontSize="11" Style="{StaticResource ThemeMenuItemStyle}" HorizontalAlignment="Center" Padding="2,5,5,5" ShortcutKey="B" ShortcutModifierKeys="Control" >
<viblend:MenuItem.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="Home" Foreground="White" VerticalAlignment="Center"></TextBlock>
<Image Source="{StaticResource HomeIcon}" HorizontalAlignment="Left" Grid.Column="0" Width="25" Height="25" Margin="1"></Image>
</Grid>
</DataTemplate>
</viblend:MenuItem.HeaderTemplate>
</viblend:MenuItem>
<viblend:MenuItem Width="125" FontSize="11" Name="SSRSReportsMenuItem" Style="{StaticResource ThemeMenuItemStyle}" HorizontalAlignment="Center" Padding="2,5,5,5">
<viblend:MenuItem.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="SSRS Reports" Foreground="White" VerticalAlignment="Center"></TextBlock>
<Image Source="{StaticResource ReportIcon}" HorizontalAlignment="Left" Grid.Column="0" Width="25" Height="25" Margin="1"></Image>
</Grid>
</DataTemplate>
</viblend:MenuItem.HeaderTemplate>
</viblend:MenuItem>
<viblend:MenuItem Width="125" FontSize="11" Name="CrystalReportsMenuItem" Style="{StaticResource ThemeMenuItemStyle}" HorizontalAlignment="Center" Padding="2,5,5,5">
<viblend:MenuItem.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="Crystal Reports" Foreground="White" VerticalAlignment="Center"></TextBlock>
<Image Source="{StaticResource ReportIcon}" HorizontalAlignment="Left" Grid.Column="0" Width="25" Height="25" Margin="1"></Image>
</Grid>
</DataTemplate>
</viblend:MenuItem.HeaderTemplate>
</viblend:MenuItem>
</viblend:Menu>
以下样式应用于菜单和菜单项
<Style TargetType="viblend:Menu" x:Key="ThemeMenuStyle">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="Padding" Value="3" />
<Setter Property="TabNavigation" Value="Local" />
<Setter Property="Orientation" Value="Horizontal"></Setter>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="HorizontalTemplate">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel x:Name="LayoutRoot" Orientation="Horizontal" VerticalAlignment="Bottom" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="VerticalTemplate">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel x:Name="LayoutRoot" Orientation="Vertical" VerticalAlignment="Top" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="viblend:Menu">
<Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="Transparent" x:Name="Background" Opacity="1">
<ItemsPresenter x:Name="ItemsHost" VerticalAlignment="Top">
</ItemsPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="viblend:MenuItem" x:Key="ThemeMenuItemStyle">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="Padding" Value="9,3,9,3" />
<Setter Property="TabNavigation" Value="Local" />
<Setter Property="RootNormalForeBrush" Value="{StaticResource MenuItemRootForegroundBrush}"/>
<Setter Property="RootHighlightForeBrush" Value="{StaticResource MenuItemRootHighlightForegroundBrush}"/>
<Setter Property="DisabledForeBrush" Value="{StaticResource MenuItemDisabledForegroundBrush}"/>
<Setter Property="NormalForeBrush" Value="{StaticResource MenuItemForegroundBrush}"/>
<Setter Property="HighlightForeBrush" Value="{StaticResource MenuItemHighlightForegroundBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="viblend:MenuItem">
<Grid VerticalAlignment="Top">
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="PopupStates">
<vsm:VisualStateGroup.Transitions>
<vsm:VisualTransition GeneratedDuration="00:00:00.1" To="PopupOpened"/>
<vsm:VisualTransition GeneratedDuration="00:00:00.1" To="PopupClosed"/>
<vsm:VisualTransition GeneratedDuration="00:00:00.1" To="PopupCollapsed"/>
<vsm:VisualTransition GeneratedDuration="00:00:00.2" To="PopupExpanded"/>
</vsm:VisualStateGroup.Transitions>
<vsm:VisualState x:Name="PopupExpanded">
<Storyboard x:Name="ExpandingStoryboard">
<DoubleAnimation
Storyboard.TargetName="AnimationPresenter"
Storyboard.TargetProperty="Percentage"
To="1.0" Duration="0:0:0.2"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="PopupCollapsed">
<Storyboard x:Name="CollapsingStoryboard">
<DoubleAnimation
Storyboard.TargetName="AnimationPresenter"
Storyboard.TargetProperty="Percentage"
To="0.0" Duration="0:0:0.1" />
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="PopupOpened">
<Storyboard x:Name="OpeningStoryboard">
<DoubleAnimation
Storyboard.TargetName="PopupChild"
Storyboard.TargetProperty="Opacity"
To="1.0" Duration="0:0:0.1" />
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="PopupClosed">
<Storyboard x:Name="ClosingStoryboard">
<DoubleAnimation
Storyboard.TargetName="PopupChild"
Storyboard.TargetProperty="Opacity"
To="0.0" Duration="0:0:0.1" />
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="CommonStates">
<vsm:VisualStateGroup.Transitions>
<vsm:VisualTransition GeneratedDuration="00:00:00.2"/>
</vsm:VisualStateGroup.Transitions>
<vsm:VisualState x:Name="Normal" >
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="ImageMargin" Storyboard.TargetProperty="Opacity" To="1"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundGradientOver" Storyboard.TargetProperty="Opacity" To="0"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="InnerBackgroundGradientOver" Storyboard.TargetProperty="Opacity" To="0"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="HeaderMouseOver">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="HeaderBackground" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundGradientOver" Storyboard.TargetProperty="Opacity" To="1"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="ImageMargin" Storyboard.TargetProperty="Opacity" To="0"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="InnerBackgroundGradientOver" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="SelectionStates">
<vsm:VisualStateGroup.Transitions>
<vsm:VisualTransition GeneratedDuration="00:00:00.2"/>
</vsm:VisualStateGroup.Transitions>
<vsm:VisualState x:Name="Unselected">
<Storyboard>
<DoubleAnimation Duration="5" Storyboard.TargetName="Background" Storyboard.TargetProperty="Opacity" To="0"/>
<DoubleAnimation Duration="5" Storyboard.TargetName="BackgroundGradientSelectedDisabled" Storyboard.TargetProperty="Opacity" To="0"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Duration="5" Storyboard.TargetName="Background" Storyboard.TargetProperty="Opacity" To="1"/>
<DoubleAnimation Duration="5" Storyboard.TargetName="BackgroundGradientSelectedDisabled" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="FocusStates">
<vsm:VisualState x:Name="Focused"/>
<vsm:VisualState x:Name="Unfocused"/>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Rectangle Stroke="{StaticResource MenuImageMarginStrokeBrush}" Fill="{StaticResource MenuImageMarginBrush}" x:Name="ImageMargin" Width="27" StrokeThickness="0" HorizontalAlignment="Left" RadiusX="1" RadiusY="1" Opacity="1"></Rectangle>
<Rectangle Fill="{StaticResource MenuHeaderItemBackgroundBrush}" x:Name="HeaderBackground" RadiusX="1" RadiusY="1" Stroke="{StaticResource MenuHeaderItemStrokeBrush}" Opacity="0"></Rectangle>
<Rectangle Fill="{StaticResource ToolbarHoverBackgroundBrush}" RadiusX="5" RadiusY="5" x:Name="InnerBackgroundGradientOver" Stroke="{StaticResource MenuHighlightStrokeBrush}" Opacity="0"></Rectangle>
<Rectangle Margin="1" Fill="{StaticResource ToolbarHoverBackgroundBrush}" x:Name="BackgroundGradientOver" RadiusX="5" RadiusY="5" Stroke="#FF09638E" Opacity="1"></Rectangle>
<Rectangle x:Name="BackgroundGradientSelectedDisabled" RadiusX="1" RadiusY="1" Opacity="0">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFEFEFEF" Offset="0.046"/>
<GradientStop Color="#FFEFEFEF" Offset="0.194"/>
<GradientStop Color="#FFEFEFEF" Offset="0.507"/>
<GradientStop Color="#FFEFEFEF" Offset="0.521"/>
<GradientStop Color="#FFEFEFEF" Offset="0.811"/>
<GradientStop Color="#FFEFEFEF" Offset="0.982"/>
</LinearGradientBrush>
</Rectangle.Fill>
<Rectangle.Stroke>
<LinearGradientBrush EndPoint="0.5,0" StartPoint="0.5,1">
<GradientStop Color="#FFEFEFEF"/>
<GradientStop Color="#FFEFEFEF" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Stroke>
</Rectangle>
<Rectangle Stroke="{StaticResource MenuSeparatorStroke}" Fill="{StaticResource MenuSeparatorBrush}" x:Name="SeparatorBackground" Margin="1,1,1,1" Height="1" StrokeThickness="0" RadiusX="1" RadiusY="1" Opacity="0"></Rectangle>
<Rectangle Stroke="{StaticResource MenuSelectedStrokeBrush}" Fill="{StaticResource MenuSelectedBrush}" x:Name="Background" StrokeThickness="1" RadiusX="1" RadiusY="1" Opacity="0"></Rectangle>
<!--<Path Visibility="Collapsed" Height="10" HorizontalAlignment="Left" Margin="10,1,0,1.5" x:Name="CheckIcon" Width="10.5" Opacity="0" Fill="{StaticResource MenuCheckIconBrush}" Stretch="Fill" Data="M102.03442,598.79645 L105.22962,597.78918 L106.78825,600.42358 C106.78825,600.42358 108.51028,595.74304 110.21724,593.60419 C112.00967,591.35822 114.89314,591.42316 114.89314,591.42316 C114.89314,591.42316 112.67844,593.42645 111.93174,594.44464 C110.7449,596.06293 107.15683,604.13837 107.15683,604.13837 z"/>-->
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<ContentControl
x:Name="contentPresenter"
FontFamily="Segoe UI, Microsoft Sans Serif, Verdana"
Grid.Column="0"
Content="{TemplateBinding Header}"
ContentTemplate="{TemplateBinding HeaderTemplate}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="Top"
Margin="{TemplateBinding Padding}"/>
<Path Margin="10,0,0,0" HorizontalAlignment="Right" x:Name="arrow" Fill="{StaticResource MenuArrowBrush}" VerticalAlignment="Center" RenderTransformOrigin="0,1.2" Stroke="{StaticResource MenuArrowBrush}" StrokeThickness="2" Data="M 1,1.5 L 4.5,5 L 8,1.5" Opacity="1">
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="-90"/>
<TranslateTransform/>
</TransformGroup>
</Path.RenderTransform>
</Path>
</StackPanel>
<Popup x:Name="Popup" VerticalAlignment="Top">
<Border CornerRadius="5,5,5,5" x:Name="PopupChild" BorderThickness="0,0,0,0" Background="Transparent" Opacity="0">
<Border.BorderBrush>
<LinearGradientBrush EndPoint="0, 0.5" StartPoint="1,0.5">
<GradientStop Color="#FFB1C7D6" Offset="0"/>
<GradientStop Color="#FFB1C7D6" Offset="1"/>
</LinearGradientBrush>
</Border.BorderBrush>
<Border CornerRadius="5,5,5,5" Height="{TemplateBinding DropDownHeight}" x:Name="PopupChild2" BorderThickness="1" BorderBrush="{StaticResource MainMenuBackgroundBrush}" Background="{StaticResource MainMenuBackgroundBrush}" Opacity="1">
<utilityControls:ScrollablePanel utilityControls:ScrollablePanel.VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}" x:Name="ScrollablePanel" HorizontalScrollBarVisibility="Disabled">
<ItemsPresenter Margin="1" x:Name="ItemsHost" VerticalAlignment="Top">
</ItemsPresenter>
</utilityControls:ScrollablePanel>
</Border>
</Border>
</Popup>
<!--<utilities:ExpandableContentControl x:Name="AnimationPresenter" VerticalAlignment="Top">
</utilities:ExpandableContentControl>-->
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
【问题讨论】:
-
目前是向上开吗?你想让它向下打开,就像“下拉”这个名字所暗示的那样?
-
是的,当悬停在它上面时,它当前向上打开,但我需要更改方向以向下打开,但它需要是这个特定的控件。
标签: silverlight menu