Как сделать zindex элемента пользовательского интерфейса относительно родительского холста, а не содержащего холста? - PullRequest
1 голос
/ 27 сентября 2011

По сути, я пытаюсь создать эффект тени для простого элемента Path в пользовательском элементе управления, поместив ZIndex на элемент shadow (также Path), равный 1, и zindex на другой элемент пользовательского интерфейса, равный 2. Эти 2 элемента находятся в пользовательском элементе управления, где корень является холстом и работает, как ожидается, в пользовательском элементе управления.

У меня также есть холст, содержащий 2 экземпляра этого элемента управления, где я хочу, чтобы теневой элемент каждого отображался под не-теневым элементом другого. Он не работает, и тень одного элемента управления появляется поверх других элементов, не являющихся тенями. Если я изменю индекс ZIndex родительского холста для пользовательского элемента управления, он поместит оба элемента в пользовательском элементе управления поверх других элементов пользовательского элемента управления. Я предполагаю, что это потому, что ZIndex только относительно холста, а не всех холстов.

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

1 Ответ

3 голосов
/ 27 сентября 2011

Боюсь, вам нужно будет найти способ собрать ваши дорожки в один холст. Когда визуализируется холст, он уважает Z-индекс только своих непосредственных потомков. Вы можете проверить это следующим образом:

<Canvas x:Name="LayoutRoot" Background="White">
  <Rectangle Width="100" Height="100" Fill="Green"
              Canvas.Left="20" Canvas.Top="20"
              Stroke="Black"
              Canvas.ZIndex="10"/>
  <Canvas Canvas.ZIndex="5">
    <Rectangle Width="100" Height="100" Fill="Blue"
                Canvas.Left="30" Canvas.Top="30"
                Stroke="Black"
                Canvas.ZIndex="16"/>
  </Canvas>
</Canvas>

В приведенном выше примере, хотя синий прямоугольник имеет ZIndex, равный 16, что больше, чем ZIndex зеленого прямоугольника, он отображается ниже, поскольку он содержится в Canvas с ZIndex, равным 5. Удалите с холстом и синим прямоугольником над зеленым.

...