У меня есть два ItemsControls в моем XAML, оба привязаны к списку фигур с разными координатами, высотой, шириной и т. Д. *
Похоже, что фигуры в одном и том же списке знают о z-индексе друг друга - как в случае, когда я могу наводить курсор на фигуру, она выводит ее на передний план других фигур, как и предполагалось.
Мне бы хотелось, чтобы прямоугольники в List1 знали о z-индексе прямоугольников в List2, чего они, похоже, не имеют в данный момент. Есть ли простой способ настроить мой XAML для достижения этой цели? Заранее спасибо.
Мой XAML:
<Grid>
<ItemsControl ItemsSource="{Binding List1}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Height="{Binding Height}" Width="{Binding Width}" Fill="{Binding Fill}" ></Rectangle>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type ContentPresenter}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Panel.ZIndex" Value="99" />
</Trigger>
</Style.Triggers>
<Setter Property="Canvas.Top" Value="{Binding YPos}"></Setter>
<Setter Property="Canvas.Left" Value ="{Binding XPos}"></Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
<ItemsControl ItemsSource="{Binding List2}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Height="{Binding Height}" Width="{Binding Width}" Fill="{Binding Fill}" ></Rectangle>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type ContentPresenter}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Panel.ZIndex" Value="99" />
</Trigger>
</Style.Triggers>
<Setter Property="Canvas.Top" Value="{Binding YPos}"></Setter>
<Setter Property="Canvas.Left" Value ="{Binding XPos}"></Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
Моя ViewModel, где я определяю свои прямоугольники:
public class ViewModel {
public List<Rect> List1 { get; set; }
public List<Rect> List2 { get; set; }
public ViewModel() {
List1 = new List<Rect>();
List2 = new List<Rect>();
PopulateList1();
PopulateList2();
}
private void PopulateList2() {
List1.Add(new Rect { Width = 30, Height = 50, XPos = 40, YPos = 50, Fill = "Blue" });
List1.Add(new Rect { Width = 70, Height = 120, XPos = 60, YPos = 100, Fill = "Green" });
List1.Add(new Rect { Width = 70, Height = 120, XPos = 30, YPos = 45, Fill = "Yellow" });
}
private void PopulateList1() {
List2.Add(new Rect { Width = 50, Height = 100, XPos = 40, YPos = 100, Fill = "Red" });
List2.Add(new Rect { Width = 50, Height = 100, XPos = 300, YPos = 100, Fill = "Green" });
List2.Add(new Rect { Width = 50, Height = 100, XPos = 320, YPos = 75, Fill = "Blue" });
}
}
Прямоугольник Модель:
public class Rect {
public decimal Width { get; set; }
public decimal Height { get; set; }
public decimal XPos { get; set; }
public decimal YPos { get; set; }
public string Fill { get; set; }
}
РЕДАКТИРОВАТЬ: https://imgur.com/a/1dzYYKc Для пояснения, вот показанные прямоугольники. В настоящее время, когда я наводю указатель мыши на фигуры в их собственном списке, они выдвигаются, как и ожидалось, но перекрывающиеся фигуры из других списков не появляются, так как они, вероятно, не знают о z-индексе друг друга.