Я хочу расширить ItemsPanel
, чтобы я мог отобразить «многоуровневую» визуальную структуру, в которой у меня есть «рамка» с известным размером и множеством наложений, аналогично тому, каково было бы приложение для картографии или иллюстрации.
Проблема, с которой я сталкиваюсь, состоит в том, чтобы выяснить, как комбинировать вещи, чтобы все работало так, как ожидалось.Что я сделал до сих пор:
- Создан элемент управления, который наследуется от
ItemsControl
; - Внутри элемента управления поместите
Viewbox
, содержащий ItemsPresenter
- В элементах управления элемента управления создан стиль, нацеленный на его собственный тип, для которого
ItemsPanel
задан шаблон элементов, состоящий из Canvas
.
Так что я ожидаю, что в режиме проверки живого дереваЯ должен видеть во вложенной структуре:
- LayerContainer (имя класса моего элемента управления)
Вместо этого я вижу следующее:
Итак, проблема в том, что ViewBox содержится внутри Canvas, наряду с отображаемыми элементами.
Myвопросn будет: как мне структурировать свой элемент управления LayerContainer таким образом, чтобы порядок вложенности был ItemsPresenter-> Viewbox-> Canvas-> Items?
Вот мой элемент управления (имя на самом деле не LayerContainer
)
<ItemsControl x:Class="Miotec.PressureMapping.UserControls.BaroLayerContainer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Miotec.PressureMapping.UserControls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<ItemsControl.Resources>
<Style TargetType="local:BaroLayerContainer">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<Canvas Width="{Binding Parametros.Colunas}"
Height="{Binding Parametros.Linhas}"
IsItemsHost="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.Resources>
<Viewbox Stretch="Uniform" x:Name="container">
<ItemsPresenter
Width="{Binding ActualWidth, ElementName=container}"
Height="{Binding ActualHeight, ElementName=container}"/>
</Viewbox>
</ItemsControl>