2016-05-29 24 views
0

Ich habe eine ListBox an eine ObservableCollection gebunden, mit einem Canvas als ItemsPanel. Alles funktioniert wie erwartet - ich habe das Ziehen der Objekte erfolgreich implementiert - aber das Problem ist, dass ich den ZIndex des angeklickten Objekts nicht setzen kann. Debugging zeigt, dass alle Elemente einen ZIndex von 0 haben, der mir seltsam erscheint. Was ich will, ist, den Gegenstand nach vorne zu bringen, wenn er angeklickt und nach der Veröffentlichung zurückgeschickt wird. Kann mir jemand Ideen geben? Bitte zögern Sie nicht, nach irgendeinem Code zu fragen, der nützlich sein könnte.ZIndex auf ObservableCollection-gebundene ListBox

Update: Dies ist die ItemsContainerStyle als Fenster Ressource definiert

<Style x:Key="MediaContainerStyle" TargetType="ListBoxItem"> 
    <Setter Property="Canvas.Left" Value="{Binding MediaPosition.X,UpdateSourceTrigger=PropertyChanged}"/> 
    <Setter Property="Canvas.Top" Value="{Binding MediaPosition.Y,UpdateSourceTrigger=PropertyChanged}"/> 
    <Setter Property="Panel.ZIndex" Value="{Binding ZIndex,UpdateSourceTrigger=PropertyChanged}"/> 
</Style> 

und die Vorlage für den Artikel

<DataTemplate x:Key="MediaDataTemplate"> 
    <views:MediaItemView MouseDown="OnMediaItemMouseDown" 
         MouseMove="OnMediaItemMouseMove"/> 
</DataTemplate> 

wo MediaItemView ein Steuer Benutzer ist.

In der Code-behind, ich

void OnMediaItemMouseDown(Object sender, MouseButtonEventArgs e) 
{ 
    if (e.LeftButton == Pressed) 
    { 
     FrameworkElement feItem = sender as FrameworkElement; 
     MediaViewModel vmItem = feItem.DataContext as MediaViewModel; 
     vmItem.ZIndex = vm.MainMedia.Count; 
     // Keep the click point 
     pClick = e.GetPosition(feItem); 
    } 
} 

wo vm eine Instanz meiner zugrunde liegenden Viewmodel ist, eine Doppel Eigenschaft ZIndex

+1

Schwer zu sagen, ohne Ihren Code zu sehen. Stellen Sie jedoch sicher, dass Sie den ZIndex im ItemContainerStyle und nicht im ItemTemplate festlegen. – Clemens

+0

Ich habe das versucht. Ich habe Panel.ZIndex des ItemContainerStyle an eine Eigenschaft in meinem zugrunde liegenden Ansichtsmodell gebunden und das mit der Maus geändert, aber es funktioniert nicht. Welchen Code möchten Sie sehen? –

+0

"Welchen Code möchten Sie sehen?" Alle relevanten, d.h. die XAML der ListBox und die entsprechenden Teile des Ansichtsmodells. – Clemens

Antwort

0

Und natürlich enthält, es war direkt vor meinen Augen! Die Antwort (aus Modify ZIndex of an Items in an ItemsControl) bestand darin, meinem ItemContainerStyle (der ein ListBoxItem als TargetType hat) einen Trigger für die IsSelected-Eigenschaft hinzuzufügen. So ...

<Style.Triggers> 
    <Trigger Property="IsSelected" Value="True"> 
     <Setter Property="Panel.ZIndex" Value="99"/> 
    </Trigger> 
</Style.Triggers> 

wird tun!

Verwandte Themen