Я использую шаблон бизнес-приложения Silverlight, но мне нужно настроить макет MainPage в соответствии с существующим шаблоном проектов ASP.NET клиента. Мне удалось создать меню навигации, которое выделяет выбранный элемент. Но когда происходит событие MouseEnter, стиль выбранного элемента меню становится стилем MouseOver VisualState. А в MouseLeave выбранный пункт меню превращается в Normal VisualState. Такое поведение работало для стандартного меню решения, но что-то может отсутствовать в моей модификации. Определение кода заключается в следующем. Спасибо!
<Style x:Key="NavMenuItem" TargetType="HyperlinkButton">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Padding" Value="20,10,20,10" />
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="MinHeight" Value="40"/>
<Setter Property="MinWidth" Value="150"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="HyperlinkButton">
<Grid Margin="20,20,0,0">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation BeginTime="0" To="1" Duration="00:00:00.01"
Storyboard.TargetName="MenuItemBorder"
Storyboard.TargetProperty="Opacity" />
<DoubleAnimation BeginTime="0" To="1" Duration="00:00:00.01"
Storyboard.TargetName="MenuItemBorder"
Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.ShadowDepth)" />
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimation BeginTime="0" To="1" Duration="00:00:00.01"
Storyboard.TargetName="MenuItemBorder"
Storyboard.TargetProperty="Opacity" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="LinkStates">
<VisualState x:Name="InactiveLink"/>
<VisualState x:Name="ActiveLink">
<Storyboard>
<DoubleAnimation BeginTime="0" To="1" Duration="00:00:00.01"
Storyboard.TargetName="MenuItemBorder"
Storyboard.TargetProperty="Opacity" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border Name="MenuItemBorder" CornerRadius="10,0,0,10" Opacity="0"
MinHeight="{TemplateBinding MinHeight}" MinWidth="{TemplateBinding MinWidth}">
<!--BorderBrush="Silver" BorderThickness="1"-->
<Border.Background>
<LinearGradientBrush StartPoint="0.5, 0" EndPoint="0.5, 1">
<GradientStop Color="White" Offset="0.6"/>
<GradientStop Color="Silver" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<Border.Effect>
<DropShadowEffect x:Name="BorderShadow" ShadowDepth="5" Color="#FF484848" Opacity="0.5" BlurRadius="5"/>
</Border.Effect>
</Border>
<ContentPresenter x:Name="ContentPresenter"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="{TemplateBinding Padding}" Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<HyperlinkButton Style="{StaticResource NavMenuItem}" NavigateUri="/Home" TargetName="ContentFrame"
MouseEnter="HyperlinkButton_MouseEnterLeave" MouseLeave="HyperlinkButton_MouseEnterLeave" />
private void HyperlinkButton_MouseEnterLeave(object sender, MouseEventArgs e) {
HyperlinkButton hb = sender as HyperlinkButton;
if (hb.NavigateUri.ToString() == ContentFrame.CurrentSource.ToString())
VisualStateManager.GoToState(hb, "ActiveLink", true);
}