У меня есть ItemsControl, который имеет Canvas в виде ItemsPanel, элементы - это простые рамки, детали границ связаны с моделью представления, такими как X, Y ширина, высота, цвет и т. Д. Я скоро понял, что даже хотя я мог связать большинство данных, таких как размер и цвет, с самим элементом границы, я должен был связать точечные данные и ZIndex в стиле контейнера ItemsControl, но я считаю, что это потому, что эти свойства относятся только к тому ItemContainer, который является ContentPresenter:
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Metrics.Ordinate.X}"/>
<Setter Property="Canvas.Top" Value="{Binding Metrics.Ordinate.Y}"/>
<Setter Property="Canvas.ZIndex" Value="{Binding ZIndex}"/>
</Style>
</ItemsControl.ItemContainerStyle>
До сих пор все работало как надо. Когда пользователь зависал над границами, я использовал триггер при наведении мыши, чтобы изменить цвет фона, но поскольку пользовательский интерфейс уже настолько зависел от цветов, мы решили, что для наведения курсора мы хотим, чтобы границы увеличивались в размере. Поэтому вместо этого я добавил масштабное преобразование:
<Trigger Property="IsMouseOver" Value="True">
<!--<Setter Property="Background" Value="{Binding SelectedTemplate.StandardBrush}"></Setter>-->
<Setter Property="LayoutTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.5" ScaleY="1.5"/>
</Setter.Value>
</Setter>
</Trigger>
Теперь проблема в том, что мне нужно также увеличить ZIndex этой единственной границы в триггере, чтобы при его увеличении он не ограничивался соседними элементами. Я искал, как установить родительский элемент (ContentPresenter) в XAML в триггере, и наткнулся на this . Это выглядит идеально, за исключением того, что в предъявителе контента нет имени, на которое можно сослаться, это повторный элемент управления, и я не могу понять, как я могу ссылаться на него в XAML.
Возможно ли это в триггере, или я лучше ищу другой подход, либо не основанный исключительно на XAML, либо, возможно, изменение моего ItemsControl?
Большое спасибо заранее.
Пол
Редактировать
Добавление шаблона панели:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<local:AutoSizeCanvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
AutoCanvas - это пользовательский элемент управления, производный от Canvas, который переопределяет переопределение меры, поэтому он воспроизводит мяч, находясь внутри прокрутки, что является единственным отличием от стандартного Canvas.
Редактировать
Просто добавьте, что я использую шаблоны данных для связанных элементов, так как некоторые границы должны содержать в себе немного отличающиеся элементы, текущий ответ Дэвида ниже работает, при наведении указателя мыши на ZIndex проблема заключается в том, что все элементы для них, находящимся над ним, значение ZIndex увеличено, поэтому, если мышь наводит курсор на элемент, который должен находиться сзади, он поднимается наверх, что также кажется очень медленным. Решение работает, но не совсем в этом сценарии, поскольку оно устанавливает общую настройку для всех элементов, а не только для одного типа границы, для которой требуется триггер. По сути, у меня есть план рассадки, который я получаю визуальные данные из другого приложения и должен использовать его как есть. В плане есть зоны, блоки, ряды и места. Я хочу, чтобы этот триггер срабатывал только для мест.
Надеюсь, это понятно.