Я пытаюсь написать холст с набором детских коллекций с привязкой. Это невозможно сделать, как другие элементы управления, и в Интернете есть много решений, как это сделать в WPF, однако ни одно из них не работает для приложения UWP, и его возможности ограничены.
На данный момент у меня есть переопределение ItemsControl, чтобы иметь элемент управления Canvas вместо StackPanel по умолчанию. Вот мой код:
<ItemsControl x:Name="Railer" ItemsSource="{x:Bind ViewModel.ItemsToShowInCanvas, Mode=TwoWay, Converter={StaticResource OtoO}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas x:Name="MyCanvas"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="v:SubPanelViewModel">
<Grid>
<v:SubPanelView Width="100" Height="{Binding ActualHeight, ElementName=MyCanvas}"
ManipulationDelta="TextBlock_ManipulationDelta" ManipulationMode="All"
ManipulationCompleted="SubPanelView_ManipulationCompleted"
/>
<Grid.RenderTransform>
<TranslateTransform X="{Binding Left, Mode=OneWay}" Y="{Binding Top, Mode=OneWay}"/>
</Grid.RenderTransform>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
SubPanelView — это мой настраиваемый элемент управления, контекст данных для него — SubPanelViewModel, содержащий свойства Left, Top и ZIndex, которые я привязываю к просмотру. Использование RenderTransform - это хак, чтобы установить мой элемент там, где я хочу - единственный способ, который я нашел через поиск в Интернете, чтобы расположить его, как со свойствами Canvas.Left/Top.
Чего я не могу сделать, так это правильно установить свойство ZIndex - независимо от того, что я пытаюсь сделать. Причина в том, что мои элементы не являются прямыми потомками Canvas. Я просто хочу, чтобы элемент выдвигался на передний план, когда я манипулирую им.
Должен ли я просто сдаться и делать все в коде или есть какой-то способ добиться того, чего я хочу?