У меня есть холст, содержащий несколько прямоугольников:
<Canvas x:Name = "canvas">
<ItemsControl ItemsSource = "{Binding Rectangles}" Canvas.ZIndex = "5" Name = "RectanglesControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType = "ContentPresenter">
<Setter Property = "Panel.ZIndex" Value = "1" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.Resources>
<DataTemplate DataType = "{x:Type Rectangle}">
<Button Command = "{Binding Command}"
IsEnabled = "{Binding IsEnabled}">
<Button.Template>
<ControlTemplate TargetType = "{x:Type Button}">
<Path Data = "{Binding Geometry}"
Fill = "{Binding FillBrush}"
IsHitTestVisible = "True"
Cursor = "Hand"
Opacity = "{Binding IsFillVisible, Converter = {StaticResource BoolToDoubleConverter}}"/>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
</Canvas>
Для каждого прямоугольника создается кнопка, и кнопки «маскируются» под прямоугольники с помощью шаблона кнопок. Это сделано для того, чтобы прямоугольники были интерактивными.
Теперь проблема в том, что некоторые кнопки включены, а некоторые нет. В результате, если неактивная кнопка находится над включенной кнопкой, нельзя щелкнуть по включенной кнопке.
Есть ли способ переместить включенные кнопки на передний план или иным образом разрешить переход с неактивных кнопок на включенные?





Используйте DataTrigger, чтобы установить свойство ZIndex:
<ItemsControl.ItemContainerStyle>
<Style TargetType = "ContentPresenter">
<Style.Triggers>
<DataTrigger Binding = "{Binding IsEnabled}" Value = "True">
<Setter Property = "Panel.ZIndex" Value = "1"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
Извините, забыл Value = "True" на DataTrigger.
Не верю, но дубликата нет. Ближайшее, что я нашел, это Вот этот.