2013-12-22 4 views
1

У меня есть элемент табуляции, заголовок имеет следующую форму: image_margin_textblock.wpf marginover margin в stackpanel

Триггер IsMouseOver работает правильно, когда курсор мыши находится над изображением, а также над текстовым блоком. Но, когда курсор мыши находится над краем между изображением и текстовым блоком, триггер IsMouseOver не запускается. Это создает раздражающий мерцающий эффект.

Есть ли у вас какие-либо идеи о том, как достичь указателя мыши по краю?

Вот код:

<TabItem.Header> 
<ContentControl> 
    <ContentControl.Template> 
     <ControlTemplate> 
      <StackPanel x:Name="sp0" Orientation="Horizontal"> 
       <StackPanel x:Name="sp1" Orientation="Horizontal" Background="Blue"> 
        <Image VerticalAlignment="Center" HorizontalAlignment="Center" Source="tab1.png"/> 
       </StackPanel> 
       <TextBlock Margin="10,0,0,0" Text="Tab1" VerticalAlignment="Center"/> 
      </StackPanel> 
      <ControlTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" Value="True"> 
        <Setter TargetName="sp1" Property="StackPanel.Background" Value="Green"/> 
       </DataTrigger> 
       <Trigger SourceName="sp0" Property="IsMouseOver" Value="True"> 
        <Setter TargetName="sp1" Property="StackPanel.Background" Value="Green"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </ContentControl.Template> 
</ContentControl> 

Спасибо.

ответ

6

Установить Background на внешний StackPanel на Transparent, чтобы маржа также участвовала в HitTest (т. Е. Реагировала на события мыши).

Прямо сейчас только изображение и область TextBlock реагируют на событие MouseOver. Установка фона на прозрачный будет работать.

<StackPanel x:Name="sp0" Orientation="Horizontal" Background="Transparent"> 
4

Установить фон вашего StackPanel в Transparent. Это делает видимым удачный тест.

<StackPanel x:Name="sp0" Orientation="Horizontal" Background="Transparent"> 
      <StackPanel x:Name="sp1" Orientation="Horizontal" Background="Blue"> 
       <Image VerticalAlignment="Center" HorizontalAlignment="Center" Source="tab1.png"/> 
      </StackPanel> 
      <TextBlock Margin="10,0,0,0" Text="Tab1" VerticalAlignment="Center"/> 
    </StackPanel> 
+0

Это сработало. Большое спасибо. – srg

Смежные вопросы