Есть ли способ установить Canvas Children с привязкой и заставить Canvas.Left/Top/ZIndex работать?

Я пытаюсь написать холст с набором детских коллекций с привязкой. Это невозможно сделать, как другие элементы управления, и в Интернете есть много решений, как это сделать в 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. Я просто хочу, чтобы элемент выдвигался на передний план, когда я манипулирую им.

Должен ли я просто сдаться и делать все в коде или есть какой-то способ добиться того, чего я хочу?


person RTDev    schedule 14.01.2016    source источник
comment
См. также этот ответ.   -  person Clemens    schedule 14.01.2016
comment
то же самое, что я уже написал Рэйчел ниже - привязки не работают в ‹Setter.... Value={Binding...}› потому что это UWP   -  person RTDev    schedule 14.01.2016
comment
См. этот ответ для решения проблемы.   -  person Clemens    schedule 14.01.2016