如何使用户控制在wpf最顶层?
问题描述:
我有一个网格,其中包含三行。 第一行包含哪个显示工具栏。 第二行包含显示状态栏。 第三行包含与可观察集合绑定的数据的列表框。如何使用户控制在wpf最顶层?
当某些条件满足时,我需要显示弹出窗口。
我以为使用弹出,与弹出的问题是它不会随着父控件移动,当我移动窗口。
因此,我决定创建一个用户控件(比如说mypopup),它以编程方式添加到ZIndex较高的第二行,问题是即使我设置了更高的索引,它将进入ListboxItems后面。
a)任何解决方案?
作为一个解决方案,我认为使用Adorner用户控件(mypopup),问题是我的用户控件(mypopup)包含Button和复选框,应用装饰器后,这些控件无法访问。
b)任何想法让我的用户控件与装饰者互动?
答
<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 /高度。订单很重要,最后一个是在同一行内的其他人。如果您只想占用第三行,请更改行和行范围。
答
装饰者不会给你交互性。他们只是基于绘图。所以他们不会像用户控件那样反应,除非你“模拟”它。所以让我们暂时把它们放在一边。
仅限使用弹出窗口。设置他们的放置目标和放置方向。下面的弹出窗口放置在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;
让我知道这是否有帮助。