2016-07-04 99 views
0

我有依赖项属性的问题。我一直在寻找“如何”,但迄今为止没有任何东西可以帮助我。依赖属性does not trigger

我需要一个网格来改变它的背景颜色,当我把东西拖进去。这是我到目前为止的代码:

VB

Friend Shared ReadOnly isDragOverPropertyKey As DependencyPropertyKey = DependencyProperty.RegisterReadOnly("isDragOver", GetType(Boolean), _ 
                             GetType(ucPageControl), _ 
                             New PropertyMetadata(False)) 


Public Shared ReadOnly isDragOverProperty As DependencyProperty = isDragOverPropertyKey.DependencyProperty 

Private _isDragOver As Boolean = True 
Public Property isDragOver() As Boolean 
    Get 
     Return CBool(GetValue(isDragOverProperty)) 
    End Get 
    Set(ByVal value As Boolean) 
     SetValue(isDragOverProperty, value) 
    End Set 
End Property 

Private Sub Grid_DragEnter(sender As Object, e As Windows.DragEventArgs) 
    isDragOver = True 
End Sub 


Private Sub Grid_DragLeave(sender As Object, e As Windows.DragEventArgs) 
    isDragOver = False 
End Sub 

XAML

<Grid Margin="0,0,216,63" DragEnter="Grid_DragEnter" DragLeave="Grid_DragLeave" MouseEnter="Grid_MouseEnter_1" MouseLeave="Grid_MouseLeave_1" AllowDrop="True" > 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.Style> 
     <Style TargetType="Grid"> 
      <Style.Triggers> 
       <Trigger Property="Elements:ucPageControl.isDragOver" Value="False"> 
        <Setter Property="Background" Value="White"></Setter> 
       </Trigger> 
       <Trigger Property="Elements:ucPageControl.isDragOver" Value="True"> 
        <Setter Property="Background" Value="Black"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Style> 
</Grid> 

不知怎的,我的网格犯规实现时,我的财产变化。任何人在这里帮忙?

+0

您不应该使用只读'isDragOverProperty'来调用SetValue。改为尝试'SetValue(isDragOverPropertyKey,value)'。除此之外,删除私人'_isDragOver'字段。它没有被使用。 – Clemens

+0

你的解决方案不能像你期望的那样工作的原因是你的属性设置在你的(大概是)'UserControl'(它被定义的类)上,但你的触发器期望它被设置在'Grid '(从未发生过)。您可能需要考虑使用[附加的依赖项属性](https://msdn.microsoft.com/en-us/library/ms749011(v = vs.110).aspx),而不是普通的。否则,你应该使用'DataTrigger'而不是'Trigger'。 – Grx70

回答

0

创建一个新的类,该类继承Grid并包含依赖属性。并在xaml中使用它。

<controls:MyGrid Margin="0,0,216,63" DragEnter="Grid_DragEnter" DragLeave="Grid_DragLeave" MouseEnter="Grid_MouseEnter_1" MouseLeave="Grid_MouseLeave_1" AllowDrop="True" > 
    <controls:MyGrid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
    </controls:MyGrid.RowDefinitions> 
    <controls:MyGrid.Style> 
     <Style TargetType="controls:MyGrid"> 
      <Style.Triggers> 
       <Trigger Property="IsDragOver" Value="False"> 
        <Setter Property="Background" Value="White"></Setter> 
       </Trigger> 
       <Trigger Property="IsDragOver" Value="True"> 
        <Setter Property="Background" Value="Black"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </controls:MyGrid.Style> 
</controls:MyGrid> 
+0

请问您可以添加该类的C#代码,澄清? – Eych