2010-12-11 11 views
0

I definiert die folgenden Ressourcen:Wie funktionieren 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> 

Aber leider sind die StyleTriggers nicht funktioniert, wie ich dachte. Die Deckkraft wurde geändert, aber der Hintergrund ist immer noch derselbe. Ich versuchte es auch mit nur einem Setter, aber der Hintergrund immer noch nicht geändert:

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

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

Was ist das Problem?

=== === EDIT

Hier ist der Code, den ich verwende, um die Content zu bekommen:

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

Sie Hintergrund Einstellung explizit auf der Content? In diesem Fall überschreiben Sie den Trigger. B.

+0

Hmm, nicht absichtlich ... Aber vielleicht? Allerdings habe ich den ganzen Code hier gepostet. –

+0

Ich meine, wo Sie den CursorStyle verwenden. Wie sieht dieser Code aus? Hast du ein ContentControl definiert? –

Antwort

1

Stil kann Hintergrund nicht festgelegt, da diese Eigenschaft, im Gegensatz zu Opazität, in nicht existieren eine FrameworkElement Klasse. Eigenschaften eines Framework-Elements können standardmäßig verwendet werden, aber die Eigenschaften eines Controls (z. B. Background, BorderThickness, HorizontalContentAlignment) sollten innerhalb einer Vorlage definiert werden.

ist hier eine richtige Version, ich habe eine gemeinsame Grenze mit Hintergrund hinzugefügt:

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

Wenn meine Antwort das Problem löst, möchte ich eine Annahme ohne Abstimmung erhalten. Wahrscheinlich wird es ein goldenes Abzeichen geben, aber das ist mir egal, ich bin nur neugierig. – vorrtex

+0

Zu spät, egal. – vorrtex

+0

sry ich habe es nicht gesehen – RoflcoptrException