2009-12-31 4 views
2

У меня есть следующий код в Window.Resources окна WPF. В основном это создание элемента, представляющего сетку с меткой, расположенной слева, и кнопкой справа. Когда я нажимаю над меткой или кнопкой, строка меняет цвет, как ожидалось, но я хочу, чтобы он также менял цвет, если мышь находится над любой из строк.WPF ItemsControl IsMouseOver не работает должным образом

Как это можно достичь?

Любая помощь приветствуется.

<Window.Resources> 
    <dtos:ProjectDto x:Key="data"/> 
    <Style x:Key="alternatingWithTriggers" 
      TargetType="{x:Type ContentPresenter}"> 
     <Setter Property="Height" Value="25"></Setter> 
    </Style> 
    <Style x:Key="onmouseover" TargetType="{x:Type DockPanel}"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="Yellow"> 
       </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

    <DataTemplate x:Key="ItemTemplate"> 
     <Border x:Name="ItemBorder" HorizontalAlignment="Stretch" BorderThickness="0" Background="#BBB" ClipToBounds="True" > 
      <DockPanel ClipToBounds="True" HorizontalAlignment="Stretch" Style="{StaticResource onmouseover}"> 
       <Label Content="{Binding Name}" HorizontalAlignment="Left" Height="80"></Label> 
       <Button Content="Delete" HorizontalAlignment="Right" Margin="0,0,10,0"/> 
      </DockPanel> 
     </Border> 
... 

ответ

1

Я не вижу ничего явно неправильного в отрывке, который вы опубликовали, и так как я не перед Студией, я не могу попробовать, но если бы я был вами, я бы попробовал добавить a MouseEnter обработчик на DockPanel (просто бросьте обработчик do-nothing в коде для представления, так как вы удалите его позже).

Удостоверьтесь, что обработчик получает удар, когда вы входите, и с отладчиком/немедленным окном убедитесь, что свойство IsMouseOver так же, как вы ожидаете. Это, по крайней мере, направит ваши следующие шаги отладки:

Если IsMouseOver истинно, и ваш обработчик попал, тогда моя догадка будет о том, что триггер, который вы настроили, не совсем прав.

Если IsMouseOver является ложным или ваш обработчик не попал, тогда моя догадка будет примерно IsHitTestVisible установлена ​​в ложь или что-то в этом роде.

Просто для удовольствия, я бы также попытаться переместить декларацию стиль инлайн к DockPanel, просто чтобы убедиться, что, например, так:

<DataTemplate x:Key="ItemTemplate"> 
    <Border x:Name="ItemBorder" HorizontalAlignment="Stretch" BorderThickness="0" Background="#BBB" ClipToBounds="True" > 
     <DockPanel ClipToBounds="True" HorizontalAlignment="Stretch"> 
      <DockPanel.Style> 
       <Style TargetType="{x:Type DockPanel}"> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="Yellow"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </DockPanel.Style> 
      <Label Content="{Binding Name}" HorizontalAlignment="Left" Height="80"></Label> 
      <Button Content="Delete" HorizontalAlignment="Right" Margin="0,0,10,0"/> 
     </DockPanel> 
    </Border> 
8

Дай DockPanel Background="Transparent". Это должно позволить ему захватывать события мыши.

+0

Спасибо за ответ, но, к сожалению, ваше предложение не работает. Можете ли вы подумать что-нибудь еще? – Burt

+0

Попробуйте 'Background =" # 00000000 "' вместо –

+0

Это тоже не сработало :( – Burt