2009-11-25 8 views
0

나는 Expander을 포함하여 일부 컨트롤을 포함하는 목록을 가지고 있습니다. 익스팬더 내에 또 다른리스트가 있는데, 외부리스트를 오버레이하고 싶습니다. Expander가 열릴 도착하면캔버스가 목록 안에있는 확장기 ZOrder

<Page.Resources> 
    <x:Array x:Key="array1" Type="sys:String"> 
     <sys:String>item 1</sys:String> 
     <sys:String>item 2</sys:String> 
     <sys:String>item 3</sys:String> 
    </x:Array> 
    <DataTemplate x:Key="buttonTemplate"> 
     <Button Content="{Binding}"/> 
    </DataTemplate> 
    <DataTemplate x:Key="expanderItem"> 
     <StackPanel> 
      <Expander Header="Options"> 
       <Canvas> 
        <StackPanel Panel.ZIndex="999" Background="Red"> 
         <Label>A1</Label> 
         <Label>A2</Label> 
         <Label>A3</Label> 
         <Label>A4</Label> 
        </StackPanel> 
       </Canvas> 
      </Expander> 
      <Label BorderBrush="Black" BorderThickness="2" Content="{Binding}"/> 
     </StackPanel> 
    </DataTemplate> 
</Page.Resources> 
<Grid> 
    <ListBox ItemsSource="{StaticResource array1}" ItemTemplate="{StaticResource expanderItem}"/> 
</Grid> 

, 내부 레이블이 같은 DataTemplate에서의 레이블과 동일한 수준의 렌더링 얻을 나중에 내용이 목록의 항목 : 다음은 간단한 생식입니다. 변경하지 않고 Panel.ZIndex 패널로 옮겨 보았습니다.

나는 다음과 같은 스타일을 추가하는 경우 : 그것은 제대로 같은 목록 항목에서 항목을 중첩되지만, 여전히 나중에 목록 항목의 내용으로 혼합 렌더

<Style TargetType="{x:Type Expander}"> 
    <Style.Triggers> 
     <Trigger Property="IsExpanded" Value="True"> 
      <Setter Property="Panel.ZIndex" Value="999"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

합니다.

(I이 상당히 명백한 레이아웃 문제가 의심,하지만 난 그것을 찾을 수 없어.)

당신은 항목의 인덱스를 기반으로 DataTemplate을의 Z- 색인을 설정하는 컨버터를 쓰는 시도 할 수

답변

0

목록에. 흥미로운 점은 항목이 추가/제거 될 때 모든 것이 올바르게 업데이트되도록하는 것입니다.

레이아웃과 독립적으로 확장기가 필요합니까?

+0

레이아웃과 독립적으로 어떤 의미인지 잘 모르겠습니다. 화면의이 섹션에 다른 항목을 오버레이하기 위해 확장기가 필요하지만 목록의 항목 위치에 상대적으로 배치됩니다 ... 의미가 있습니까? –

+0

예, 맞습니다. (방금 확장기를 확장하면 레이아웃에 영향을주지 않지만 다른 항목에 겹쳐진 것처럼 보이기 때문에 레이아웃에 영향을 미치고 다른 항목이 아래로 밀려나도록 할 수 있음을 의미합니다.) 변환기 아이디어에 대해 어떻게 생각하십니까? 그것은 그럴듯 해 보입니까? –