2016-05-29 10 views
0

私はListBoxをObservableCollectionにバインドしており、ItemsPanelとしてキャンバスを使用しています。すべてが期待どおりに機能します - 私はアイテムのドラッグを実装しましたが、問題はクリックされたアイテムのZIndexを設定できないことです。デバッグは、すべてのアイテムがZIndexが0であることを示しています。これは私には奇妙に見えます。私が望むのは、アイテムをクリックしたときに前面に持ってきて、リリース時に返信することです。誰かが私に何かアイデアを与えることができますか?便利なコードをお気軽にお尋ねください。ObservableCollectionのZIndexがバインドされていますListBox

更新:これは、ウィンドウのリソース

<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> 

項目MediaItemViewユーザーコントロールである

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

ためのテンプレートとして定義され、ItemsContainerStyleあります。背後にあるコードでは

、私はもちろん、ダブルプロパティのZIndex

+1

あなたのコードを見ることなく伝えるのは難しいです。ただし、ItemTemplateではなく、ItemContainerStyleにZIndexを設定してください。 – Clemens

+0

私はそれを試みました。 ItemContainerStyleのPanel.ZIndexを、下にあるviewmodelのプロパティにバインドし、マウスを押し下げて変更しましたが、機能しません。どのようなコードを見たいですか? –

+0

"どのようなコードを見たいですか?"すべての関連するもの、つまりリストボックスのXAMLとビューモデルの対応する部分 – Clemens

答えて

0

を含む、VMが私の根底にあるのviewmodelのインスタンスである

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); 
    } 
} 

を行うと、それは右の私の目の前にいました!答え(Modify ZIndex of an Items in an ItemsControlから取得)は、IsSelectedプロパティのItemContainerStyle(TargetTypeとしてListBoxItemを持つ)にトリガーを追加することでした。だから...

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

致します!

関連する問題