2016-07-04 79 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