2017-05-26 43 views
1

我已爲行創建單元格模板。 IsMouseOver觸發器在單個單元格上工作正常,但不會在同一行中的其他單元格上觸發IsMouseOver屬性。如何將行鼠標移至行中的所有單元格

這是細胞模板,我創建

<ControlTemplate x:Key="GridViewNewCellCoreTemplate" TargetType="telerik:GridViewCell"> 
       <Grid> 
        <Border x:Name="PART_CellBorder" 
          Background="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" 
          BorderBrush="{TemplateBinding VerticalGridLinesBrush}" 
          BorderThickness="{Binding VerticalGridLinesWidth, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource GridLineWidthToThicknessConverter}, ConverterParameter=Right}"/> 
        <Border x:Name="SelectBorder" 
          Background="{StaticResource BrushHighlight}" 
          Opacity="0.2" 
          Visibility="Collapsed" 
          BorderThickness="{Binding VerticalGridLinesWidth, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource GridLineWidthToThicknessConverter}, ConverterParameter=Right}"/> 
        <ContentPresenter x:Name="PART_ContentPresenter" 
             Margin="{TemplateBinding Padding}" 
             Content="{TemplateBinding Content}" 
             ContentTemplate="{TemplateBinding ContentTemplate}" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
       </Grid> 
       <!--Grid View row selection style only trigger--> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsInEditMode" Value="True"> 
         <Setter Property="Padding" Value="0"/> 
         <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
         <Setter TargetName="PART_CellBorder" Property="Background" Value="{StaticResource BrushBackground}"/> 
        </Trigger> 
        <!--chk for mouse hover--> 
        <!--<MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsMouseOver" Value="True"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="helpers:GridViewHelper.IsReadOnlyMouseOver" Value="true"/> 
        </MultiTrigger>--> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsMouseOver" Value="True"/> 
          <Condition Property="helpers:GridViewHelper.IsReadOnlyMouseOver" Value="true"/> 
          <Condition Property="DisplayVisualCues" Value="False"/> 
         </MultiTrigger.Conditions> 
         <Setter TargetName="SelectBorder" Property="Opacity" Value="0.1"/> 
         <Setter TargetName="SelectBorder" Property="Visibility" Value="Visible"/> 
        </MultiTrigger> 
        <!--selection is working--> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="True"/> 
          <Condition Property="DisplayVisualCues" Value="False"/> 
         </MultiTrigger.Conditions> 
         <Setter TargetName="SelectBorder" Property="Visibility" Value="Visible"/> 
        </MultiTrigger> 
        <Trigger Property="IsCurrent" Value="True"> 
         <Setter TargetName="PART_CellBorder" Property="BorderBrush" Value="{StaticResource BrushHighlight}"/> 
         <Setter TargetName="PART_CellBorder" Property="BorderThickness" Value="1"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="Opacity" Value="{StaticResource DisabledOpacity}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 

      <Style x:Key="GridViewCellReadOnlyStyle" TargetType="telerik:GridViewCell" BasedOn="{StaticResource GridViewCellCoreStyle}"> 
       <Setter Property="Template" Value="{StaticResource GridViewNewCellCoreTemplate}"/> 
       <Setter Property="Background" Value="#fff6f6f6"/> 
       <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
      </Style> 

我怎樣才能獲得IsMouseOver在同一行的所有單元格,如果一個單元格將得到鼠標懸停?

+0

所以它適用於第一個單元格進入,但不是爲了別人?或者你想在選擇完整行時觸發它?對不起,我正在努力理解你的意思。 – XAMlMAX

+0

正確的,每當我進入一個單元格它的工作,但不適用於其他單元格。 @XAMlMAX –

+0

所以,當你的鼠標進入第一個單元時,它會起作用,然後當你移動到另一個單元時它不會?對不起,但你沒有指定哪個問題是正確的。 – XAMlMAX

回答

1

如果你想hightlight你應該使用多數據觸發並綁定到父GridViewRowIsMouseOver財產該行的所有單元格:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" Value="True"/> 
     <Condition Property="helpers:GridViewHelper.IsReadOnlyMouseOver" Value="true"/> 
     <Condition Property="DisplayVisualCues" Value="False"/> 
    </MultiDataTrigger.Conditions> 
    <Setter TargetName="SelectBorder" Property="Opacity" Value="0.1"/> 
    <Setter TargetName="SelectBorder" Property="Visibility" Value="Visible"/> 
</MultiDataTrigger> 
+0

我試過了,它的顯示錯誤(InvalidOperationException:'綁定'必須有非空值。) –

+0

你真的用Multi * Data * Trigger替換MultiTrigger嗎?那麼它應該工作。它肯定對我來說:) – mm8

+0

它只有當你從MultiDataTrigger條件中刪除所有屬性屬性時纔有效。即如果我刪除這些代碼' '那麼它完美的工作。 –

相關問題