如何在绑定的ItemsControl中更改ZIndex?

时间:2015-12-09 11:40:07

标签: c# wpf xaml

我只是在StackPanel中创建了3个边框,如下所示:

<StackPanel Orientation="Horizontal" >
        <Border Width="100" Height="30" Background="Red" BorderBrush="DarkRed" BorderThickness="4" Margin="0" >
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="Panel.ZIndex" Value="0"/>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Panel.ZIndex" Value="1"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
        <Border Width="100" Height="30" Background="Blue" BorderBrush="DarkBlue" BorderThickness="4" Margin="-10,0,0,0" >
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="Panel.ZIndex" Value="0"/>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Panel.ZIndex" Value="1"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
        <Border Width="100" Height="30" Background="Green" BorderBrush="DarkGreen" BorderThickness="4" Margin="-10,0,0,0" >
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="Panel.ZIndex" Value="0"/>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Panel.ZIndex" Value="1"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
    </StackPanel>

xaml将布局3种不同颜色的边框:

enter image description here

当我将鼠标移到蓝色鼠标上时,它将位于其他人的顶部:

enter image description here

但是当我将所有这些移动到ItemsControl中时,蓝色边框上的鼠标不再位于其他顶部,它只是保持原始的ZIndex。

 <DataTemplate x:Key="BorderTemplate">
        <Border Width="100" Height="30" >
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="Background" Value="Red"/>
                    <Setter Property="BorderBrush" Value="DarkRed"/>
                    <Setter Property="BorderThickness" Value="4"/>
                    <Setter Property="Panel.ZIndex" Value="0"/>
                    <Setter Property="Margin" Value="0,0,0,0"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Type}" Value="2">
                            <Setter Property="Background" Value="Blue"/>
                            <Setter Property="BorderBrush" Value="DarkBlue"/>
                            <Setter Property="BorderThickness" Value="4"/>
                            <Setter Property="Panel.ZIndex" Value="0"/>
                            <Setter Property="Margin" Value="-10,0,0,0"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Type}" Value="3">
                            <Setter Property="Background" Value="Green"/>
                            <Setter Property="BorderBrush" Value="DarkGreen"/>
                            <Setter Property="BorderThickness" Value="4"/>
                            <Setter Property="Panel.ZIndex" Value="0"/>
                            <Setter Property="Margin" Value="-10,0,0,0"/>
                        </DataTrigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Panel.ZIndex" Value="1"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
    </DataTemplate>

<ItemsControl ItemsSource="{Binding Borders}" ItemTemplate="{StaticResource BorderTemplate}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate >
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>

enter image description here

enter image description here

那么为什么Panel.ZIndex在StackPanel中工作但在ItemsControl-&gt; StackPanel中不起作用?

1 个答案:

答案 0 :(得分:1)

ZIndex绝不仅限于画布,所以我们不要把这个想法推到其他读者Maximus上。但是,由于您现在只使用ItemTemplate将您的内容加载为ContentPresenter,因此您基本上在与整个DOM无关的面板中对对象进行沙盒处理。请尝试将您的影响力放在ContentPresenter上,因为对象是您的容器,而不是单独嵌套在其中的无关联子项。这样的事情(当然你在每个边界拉出相同的触发器之后)。

<ItemsControl.ItemContainerStyle>
   <Style TargetType="{x:Type ContentPresenter}">
      <Style.Triggers>
         <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Panel.ZIndex" Value="100" />
         </Trigger>
      </Style.Triggers>
   </Style>
</ItemsControl.ItemContainerStyle>

希望这会有所帮助。欢呼声。