在Expression Blend,C#,WPF中将用户控件带到前面

时间:2011-02-21 18:01:15

标签: c# wpf expression-blend z-index blend

我有一个带网格的窗口。

在此我有一些按钮,其中一个按钮点击后会创建一个新的'PostIt',这是我创建的用户控件。

我想要做的是点击'PostIt'并将控制权放在所有其他人之上。

我试过......

Grid.SetZIndex(sender, value);

这似乎是正确的代码,没有错误,只是没有控制的移动:(

问题可能在于click的代码在用户控件而不是mainwindow cs文件中。这有关系吗?

'PostIt'只是一个带有文本框的边框。

2 个答案:

答案 0 :(得分:1)

您是在PostIt鼠标单击的处理程序中调用Grid.SetZIndex(sender,value),还是在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

答案 1 :(得分:0)

这可能不是最好的解决方案,但它对我有用;我正在重新订购两个网格:

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

...将GridOnBottom和GridOnTop重命名为您要重新排序的对象的实例。当然,这不是最好的解决方案,但它确实有效。