2011-02-10 2 views
2

Я написал шаблон для элемента меню, в котором у меня есть кнопка Toggle, которая, в свою очередь, имеет шаблон. В шаблоне кнопки я предоставляю различные визуальные эффекты для разных визуальных состояний кнопки, изменяя непрозрачность различных границ. Теперь скажите, когда нажата кнопка menuItem, отображается действие щелчка на кнопке действия. но когда я снова нахожусь над этим пунктом меню, я ожидаю, что будет иметь тот же выделенный эффект даже в проверенном состоянии кнопки переключения. Но выделенный эффект применяется ко всему меню, кроме этой кнопки переключения только потому, что событие наведения не распространяется на кнопку.Проблема шаблона элемента меню WPF

Хотел, чтобы добавить картинку, чтобы решить эту проблему, но поскольку я новичок в этом, мне не разрешено это делать.

Как установить непрозрачность границы, которая дает эффект нажатия на 0, когда элемент меню подсвечен ?!

 <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/> 
      </Grid.ColumnDefinitions> 
      <Grid x:Name="stackPanel" Background="{StaticResource DataLayerPanelBackGroundColorBrush}" > 
       <Grid.Resources> 
        <ResourceDictionary Source="../Themes/Framework.xaml"/> 
       </Grid.Resources> 
       <Border x:Name="backgroundMouseOverVisual2" BorderThickness="0,0,0,0" Margin="0,3,0,3" 
            Background="{StaticResource ActionButtonMouseOverBackgroundColorBrush}" Opacity="0"/> 
       <local:ActionButton DataContext="{TemplateBinding Tag}" x:Name="actionButton" Background="White" 
        MultiActionIdent="{Binding Converter={StaticResource ActionToIdentConverter}}"  
        SnapsToDevicePixels="True" Style="{StaticResource MultiActionMenuItemActionButtonStyle}" Margin="0" 
        /> 
      </Grid> 
      <StackPanel x:Name="contentStackPanel" Background="{StaticResource DataLayerPanelBackGroundColorBrush}" Grid.Column="1"> 
       <ContentPresenter 
        TextElement.Foreground="{StaticResource MenuTextColorBrush}" 
        SnapsToDevicePixels="True" 
       Name="HeaderHost" 
       ContentSource="Header" 
       RecognizesAccessKey="True" 
       Width="Auto" 
       Margin="10,4,35,4" /> 
      </StackPanel> 
      <TextBlock 
       x:Name="InputGestureText" 
       Grid.Column="2" 
       Text="{TemplateBinding InputGestureText}" 
       DockPanel.Dock="Right" /> 
     </Grid> 
     <Border x:Name="Border" BorderThickness="0.5" Margin="1,1,1,1" Padding="2,2,2,2" BorderBrush="Black" Background="{x:Null}" Opacity="0"/> 
    </Grid> 

И ниже шаблон ToggleButton, который назван actionButton в приведенном выше шаблоне:

+0

Нечто подобное, когда свойство IsHighlighted из MENUITEM устанавливается в истинном значении непрозрачности границы внутри шаблона управления тумблера должен быть установлен в 0. Как я могу сделать Это?? – Anee

+0

Можете ли вы разместить код? – RQDQ

+0

Ummmm, чисто из памяти, не имеет ли WPF MenuItem встроенные возможности переключения? Что-то вроде IsChecked? В любом случае, MenuItem, который, как я думаю, уже содержит кнопку в своем шаблоне, и всевозможные обманщики необходимы для передачи событий между двумя наложенными кнопками. Готов поспорить, что содержимое MenuItem упростит что-то еще. –

ответ

0

Вы должны использовать Style Triggers изменить стиль, основанный на различном состоянии.

Образец сниппет:

<Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="true"> 
      <Setter Property="BorderThickness" Value="0"/> 
     </Trigger> 
    </Style.Triggers> 
Смежные вопросы