ObservableCollection绑定ListBox上的ZIndex

时间:2016-05-29 10:16:04

标签: wpf z-index

我有一个绑定到ObservableCollection的ListBox,画布作为ItemsPanel。一切都按预期工作 - 我已成功实现拖动项目 - 但问题是我无法设置所点击项目的ZIndex。 Debuging显示所有项目的ZIndex为0,这对我来说很奇怪。我想要的是在点击时将项目置于前面,并在发布时将其发送回去。有人可以给我任何想法吗?请随时询问任何可能有用的代码。

更新:这是ItemsContainerStyle,定义为窗口资源

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

和项目的模板

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

其中MediaItemView是用户控件。

在后面的代码中,我做

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

其中vm是我的基础视图模型的实例,包含Double属性ZIndex

1 个答案:

答案 0 :(得分:1)

当然,它在我眼前!答案(取自Modify ZIndex of an Items in an ItemsControl)是为IsSelected属性添加一个触发器到我的ItemContainerStyle(它有一个ListBoxItem作为TargetType)。所以......

$ cd Ques
bash: cd: Ques: No such file or directory

$ shopt -s cdspell 

$ cd Ques
ques

ques$ shopt cdspell 
cdspell         on

会做的!