我有一个绑定到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
答案 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
会做的!