2010-12-11 21 views
0

I définit les ressources suivantes:Comment fonctionnent les StyleTrigger?

<DataTemplate x:Key="DragTemplate"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="40"></RowDefinition> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="auto"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

      <Label x:Name="DraggingSourceLabel" Content="{Binding Name}" BorderThickness="2" BorderBrush="White" Foreground="White" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Grid.Row="0" Grid.Column="0" FontSize="20"></Label> 
     </Grid> 
    </DataTemplate> 

    <Style x:Key="CursorStyle" TargetType="{x:Type ContentControl}"> 
     <Setter Property="Opacity" Value="0.50"/> 
     <Setter Property="Background" Value"Black"/> 
     <Setter Property="ContentTemplate" Value="{StaticResource DragTemplate}" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ContentControl}"> 
        <ContentPresenter 
         Content="{TemplateBinding Content}" 
         ContentTemplate="{TemplateBinding ContentTemplate}"> 
        </ContentPresenter> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="Tag" Value="DragEnter"> 
       <Setter Property="Opacity" Value="1.0"/> 
       <Setter Property="Background" Value="Red"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

</s:SurfaceWindow.Resources> 

Mais malheureusement, les StyleTriggers ne fonctionnent pas comme je pensais. L'opacité est modifiée, mais l'arrière-plan est toujours le même. J'ai également essayé avec un seul setter, mais l'arrière-plan n'a toujours pas changé:

<Style.Triggers> 
       <Trigger Property="Tag" Value="DragEnter"> 

        <Setter Property="Background" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 

Quel est le problème ici?

=== === EDIT

Voici le code que j'utilise pour obtenir le ContentControl:

ContentControl cursorVisual = new ContentControl() 
       { 
        Content = data, 
        Style = window.FindResource("CursorStyle") as Style 

       }; 

       List<InputDevice> devices = new List<InputDevice>(); 
       devices.Add(e.Contact); 


       ItemsControl dragSource = ItemsControl.ItemsControlFromItemContainer(draggedElement); 

       bool startDragOkay = SurfaceDragDrop.BeginDragDrop(sender as Grid, draggedElement, cursorVisual, data, devices, DragDropEffects.Move);  

       if (startDragOkay) 
       { 
        e.Handled = true; 
        //draggedElement.Visibility = Visibility.Hidden; 
       } 
+0

Réglage Êtes-vous Contexte explicitement ContentControl? Dans ce cas, vous écraserez le déclencheur. par exemple

+0

Hmm pas sur le but ... Mais peut-être? Cependant j'ai posté tout le code ici. –

+0

Je veux dire où vous utilisez le CursorStyle. A quoi ressemble ce code? Avez-vous un ContentControl défini? –

Répondre

1

style ne peut pas en tâche de fond car cette propriété, à la différence Opacité, est en existe pas une classe FrameworkElement. Les propriétés d'un élément Framework peuvent être utilisées hors de la boîte, mais les propriétés d'un contrôle (telles que Background, BorderThickness, HorizontalContentAlignment) doivent être définies dans un modèle.

Voici une version correcte, j'ai ajouté une frontière avec fond:

<ControlTemplate TargetType="{x:Type ContentControl}"> 
    <Border Background="{TemplateBinding Background}"> 
     <ContentPresenter 
      Content="{TemplateBinding Content}" 
      ContentTemplate="{TemplateBinding ContentTemplate}"> 
     </ContentPresenter> 
    </Border> 
</ControlTemplate> 
+0

Si ma réponse résout le problème, j'aimerais recevoir une acceptation sans vote. Probablement, ça donnera un badge d'or, mais de toute façon je m'en fous de ça, je suis juste curieux. – vorrtex

+0

Trop tard, peu importe. – vorrtex

+0

sry je ne l'ai pas vu – RoflcoptrException