Вывод пользовательского элемента управления на передний план в Expression Blend, C #, WPF - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть окно с сеткой.

На этом у меня есть несколько кнопок, одна из которых при нажатии создаст новый 'PostIt', который является пользовательским элементом управления, который я создал.

То, что я хочу сделать, - это нажать на «PostIt» и иметь этот элемент управления поверх всех остальных.

Я пытался ...

Grid.SetZIndex(sender, value);

Что, кажется,правильный код, без ошибок, просто не перемещение элемента управления: (

Проблема может заключаться в том, что код для щелчка находится в пользовательском элементе управления, а не в файле cs главного окна. Имеет ли это значение?

'PostIt' - это просто рамка с текстовым полем внутри.

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Вы вызываете Grid.SetZIndex (отправитель, значение) в обработчике щелчка мыши PostIt или в обработчике для элемента управления внутри PostIt? Какое значение вы устанавливаете?

Вот пример, который работает:

<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300" MouseUp="UserControl_MouseUp">
    <Grid>

    </Grid>
</UserControl>

  public partial class UserControl1 : UserControl
  {
    public UserControl1()
    {
      InitializeComponent();
    }

    private void UserControl_MouseUp(object sender, MouseButtonEventArgs e)
    {
      Panel.SetZIndex(this, Panel.GetZIndex(this) + 2);
    }
  }


<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
  <Grid>
    <local:UserControl1 Background="Green" Margin="40,40,100,100" Panel.ZIndex="0" />
    <local:UserControl1 Background="Red" Margin="140,140,10,10" Panel.ZIndex="1" />
  </Grid>
</Window>

Jogy

0 голосов
/ 17 апреля 2013

Возможно, это не лучшее решение, но оно мне помогло; Я переупорядочивал две сетки:

GridOnBottom.SetValue(Grid.ZIndexProperty, (int)GridOnTop.GetValue(Grid.ZIndexProperty) + 1);

... с GridOnBottom и GridOnTop, переименованными в экземпляры объектов, которые вы упорядочиваете. Конечно, это не лучшее решение, но оно работает.

...