2012-05-12 6 views
1

Я разрабатываю небольшой визуальный дизайнер, и мне нужно реализовать функцию индексирования элементов. Все элементы имеют свой уровень видимости, зависят друг от друга. Я не использую ZIndex для основных элементов, поэтому они отображаются так, как они есть в визуальном дереве. Но все элементы, когда они находятся в режиме индексного индекса, имеют область с номером индекса. Проблема в том, что эти регионы наследуют zindex своих родителей. Я попытался настроить для этих регионов zindex = 1000, но это не помогло.WPF Panel.ZIndex для дочерних элементов

<ControlTemplate x:Key="IndexRegion" TargetType="ContentControl"> 
     <Border> 
      <StackPanel Orientation="Horizontal"> 
       <!--<TextBlock Text="Индекс: "></TextBlock>--> 
       <TextBlock Text="{Binding TabIndex}"></TextBlock> 
      </StackPanel> 
     </Border> 
    </ControlTemplate> 
<Style x:Key="IndexRegionStyle" TargetType="ContentControl"> 
     <Setter Property="HorizontalAlignment" Value="Left"></Setter> 
     <Setter Property="Margin" Value="1 -15 0 0"></Setter> 
     <Setter Property="Visibility" Value="{Binding IsTabIndexVisible, Mode=OneWay, Converter={StaticResource VisibilityOfBool}}"></Setter> 
     <Setter Property="Panel.ZIndex" Value="1000"></Setter> 
    </Style> 


<DataTemplate DataType="{x:Type viewModel:WizardFormTextFieldViewModel}"> 
    <wfSurface:DesignSurfaceItemContainer Width="{Binding Width}" Height="{Binding Height}" ClipToBounds="False"> 
    <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 

     <ContentControl Style="{StaticResource IndexRegionStyle}" Template="{StaticResource IndexRegion}"> 
     </ContentControl> --- this is an index region 

     <Border Style="{StaticResource WrongElement}"> 
     <Border Style="{StaticResource TextFieldStyle}">       
     </Border> 
     </Border> 
    </Grid> 
    </wfSurface:DesignSurfaceItemContainer>   
</DataTemplate> 

Как я могу сделать все регионы выше всех основных элементов?

Спасибо!

+0

Просьба организовать код. Вы можете сделать это, нажав 4 пробела в начале строки – om471987

+0

да, я только что сделал это. –

ответ

3

ZIndex является индексом для организации г-порядок братьев и сестер (дочерние элементы одного и того же контейнера)

Если вы хотите элементы, чтобы быть на вершине «все», необходимо добавить новый контейнер, который на вершине всего. Вы не можете указать это с более низкого уровня, такого как этот шаблон. Пользовательский интерфейс остается иерархией, вы не можете сломать это, насколько я знаю.

+0

Это очень разочаровывает, я думал об этом, но я старался сохранить надежду, потому что это делает решение намного тяжелее ( –

+0

Решение будет отличаться, но не намного тяжелее. Просто добавьте верхнюю сетку/холст и добавьте к нему детей которые связаны элементами, находящимися ниже в иерархии объектов. Это просто результат того, что визуальная древовидная структура не является такой же, как структура объекта. –

+0

Спасибо, но, к сожалению, это мне не помогает, потому что у меня есть контейнерный элемент, который может содержать другие элементы, поэтому иерархия может быть очень глубокой, а некоторые элементы могут быть невидимыми, потому что они не помещаются в видимую границу элемента контейнера, поэтому я могу понять, является ли элемент видимым или нет. используйте способность adorner для каждого элемента контейнера для решения этой проблемы. Каждый элемент контейнера будет рисовать индекс вкладки для своих элементов на своем уровне adorner. –

Смежные вопросы