2010-08-11 5 views
0

Je tente d'obtenir l'effet d'une fenêtre contextuelle lorsque l'utilisateur clique avec le bouton droit de la souris sur une application Silverlight qui affiche essentiellement un contrôle personnalisé. J'utilise un menu contextuel, et tout fonctionne bien, sauf que j'ai du mal à styliser le menu contextuel pour qu'il ne se mette pas en évidence lorsque l'utilisateur survole.Suppression de l'effet MouseOver d'un menu contextuel Silverlight

Voici un extrait de ce que je suis en train de faire:

<toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu Height="100" Background="Transparent" HorizontalOffset="-100" VerticalOffset="-100" Margin="98,112,0,0" Name="contextMenu1" VerticalAlignment="Top" Width="200"> 
      <toolkit:ContextMenu.Style> 
       <Style TargetType="toolkit:ContextMenu"> 
        <Setter Property="BorderThickness" Value="0" /> 
        <Setter Property="Padding" Value="0" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="toolkit:ContextMenu"> 
           <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="2"> 
            <Grid> 
             <ItemsPresenter Margin="{TemplateBinding Padding}" /> 
            </Grid> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </toolkit:ContextMenu.Style> 
      <Canvas Width="100" Height="100" Background="Transparent"> 
       <Button Width="100" Height="30">Something</Button> 
       <Button Width="100" Height="30" Canvas.Top="70">Something Else</Button> 
      </Canvas> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 

Lorsque le menu est visible, je reçois l'effet que je veux (les deux boutons flottant juste à côté de la souris), mais quand je souris sur La boîte entière du menu contextuel se met en évidence.

Voici un exemple d'application qui illustre ceci:

http://github.com/vermeeca/ContextMenuDemo

Comment puis-je désactiver cet effet?

Répondre

1

Grâce à un collègue, j'ai la solution. Je devais juste définir le ItemContainerStyle sur le ContextMenu.

<UserControl.Resources> 
    <Style x:Key="NoMouseOverStyle" TargetType="toolkit:MenuItem"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="Padding" Value="4,3,2,3"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="toolkit:MenuItem"> 
        <Grid> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Presenter"/> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="FocusStates"> 
           <VisualState x:Name="Unfocused"/> 
           <!-- VisualState x:Name="Focused"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Bg"/> 
             <ColorAnimation Duration="0" To="#40FFFFFF" Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="InnerBorder"/> 
            </Storyboard> 
           </VisualState --> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Rectangle Fill="{TemplateBinding Background}" RadiusY="2" RadiusX="2" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/> 
         <Rectangle x:Name="Bg" Opacity="0" RadiusY="2" RadiusX="2" Stroke="#8071CBF1" StrokeThickness="1"> 
          <Rectangle.Fill> 
           <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
            <GradientStop Color="#34C5EBFF" Offset="0"/> 
            <GradientStop Color="#3481D8FF" Offset="1"/> 
           </LinearGradientBrush> 
          </Rectangle.Fill> 
         </Rectangle> 
         <Rectangle x:Name="InnerBorder" Margin="1" RadiusY="2" RadiusX="2" Stroke="Transparent"/> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition MinWidth="24" Width="Auto"/> 
           <ColumnDefinition Width="4"/> 
           <ColumnDefinition Width="*"/> 
           <ColumnDefinition Width="17"/> 
          </Grid.ColumnDefinitions> 
          <ContentPresenter Content="{TemplateBinding Icon}" Margin="1" VerticalAlignment="Center"/> 
          <ContentPresenter x:Name="Presenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="2" Margin="{TemplateBinding Padding}"/> 
         </Grid> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

Et puis

<toolkit:ContextMenu Height="100" Background="Transparent" HorizontalOffset="-100" VerticalOffset="-100" Margin="98,112,0,0" Name="contextMenu1" VerticalAlignment="Top" Width="200" ItemContainerStyle="{StaticResource NoMouseOverStyle}">