2011-09-24 52 views
0

我有一个网格,其中包含三行。 第一行包含哪个显示工具栏。 第二行包含显示状态栏。 第三行包含与可观察集合绑定的数据的列表框。如何使用户控制在wpf最顶层?

当某些条件满足时,我需要显示弹出窗口。

我以为使用弹出,与弹出的问题是它不会随着父控件移动,当我移动窗口。

因此,我决定创建一个用户控件(比如说mypopup),它以编程方式添加到ZIndex较高的第二行,问题是即使我设置了更高的索引,它将进入ListboxItems后面。

a)任何解决方案?

作为一个解决方案,我认为使用Adorner用户控件(mypopup),问题是我的用户控件(mypopup)包含Button和复选框,应用装饰器后,这些控件无法访问。

b)任何想法让我的用户控件与装饰者互动?

回答

0
<Window...> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <Toolbar Grid.Row="0" ... /> 
    <Statusbar Grid.Row="1" ... /> 
    <ListBox Grid.Row="2" ... /> 

    <OverlayControl Grid.Row="0" Grid.RowSpan="3" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" /> 
</Grid> 
</Window> 

OverlayControl:

<UserControl ...> 
<Grid Background="#30000000"> 
    <Border HorizontalAlignment="Center" VerticalAlignment="Center" ...> 
     Content, e.g. TextBlock with a message 
    </Border> 
</Grid> 
</UserControl> 

不要设置在用户控件的宽度应该伸出,使用d:如果您需要DesignWidth /高度。订单很重要,最后一个是在同一行内的其他人。如果您只想占用第三行,请更改行和行范围。

1

装饰者不会给你交互性。他们只是基于绘图。所以他们不会像用户控件那样反应,除非你“模拟”它。所以让我们暂时把它们放在一边。

仅限使用弹出窗口。设置他们的放置目标和放置方向。下面的弹出窗口放置在Button的左上角。

 popup.PlacementTarget = MyButton; 
     popup.Placement = PlacementMode.Relative; 

它沿着放置目标即MyButton移动。为此,我改变了按钮的边界,并相应地弹出移动。为了达到这种效果,您需要隐藏弹出窗口并重置其放置目标。

 popup.IsOpen = false; 
     popup.PlacementTarget = null; 
     MyButtonMargin = new Thickness(MyButton.Margin.Left + 10); 
     popup.PlacementTarget = MyButton; 
     popup.IsOpen = true; 

让我知道这是否有帮助。