2009-12-31 93 views
2

我在WPF窗口的Window.Resources中有以下代碼。它基本上做的是創建一個代表網格的項目,其標籤位於左側,按鈕位於右側。當我將鼠標懸停在標籤或按鈕上時,行會按預期改變顏色,但如果鼠標懸停在任何行上,我希望它也會改變顏色。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

我看不出有什麼明顯的錯誤在您發佈的片斷,因爲我在工作室門前我不,我不能嘗試,但如果我是你,我會嘗試加入DockPanel上的MouseEnter處理程序(只需在代碼隱藏視圖中拋出不執行任務處理程序,因爲您稍後將刪除它)。

確保處理程序在您進入時正在被擊中,並且在調試器/立即窗口中確保IsMouseOver屬性與您預期的相同。這將至少指示你的下一個調試步驟:

如果IsMouseOver爲真,並且你的處理程序被擊中,那麼我的猜測是關於你設置的觸發器是不正確的。

如果IsMouseOver爲假或您的處理程序沒有被擊中,那麼我的猜測將會像IsHitTestVisible被設置爲false或類似的東西。

只是爲了好玩,我也想嘗試內嵌移動樣式聲明的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 2009-12-31 19:14:25

+0

嘗試'背景=「#00000000」'而不是 – 2009-12-31 19:54:26

+0

這也沒有工作:( – Burt 2009-12-31 23:58:31