我有一个包含三行的网格。 第一行包含哪个显示工具栏。 第二行包含显示状态栏的内容。 第三行包含Listbox,它是绑定到observable集合的数据。
当满足某些条件时,我需要显示弹出窗口。
我想使用弹出窗口,弹出窗口的问题是当我移动窗口时它不会随父控件一起移动。
所以我决定创建一个用户控件(比如mypopup),它以第二行的方式添加ZIndex,编程方式更高,问题是即使我设置了更高的索引,它也会落后于ListboxItems。
a)对此有何解决方案?
作为一个解决方案,我认为使用Adorner进行该用户控件(mypopup),问题是我的用户控件(mypopup)包含Button和Checkbox,在应用adorner后,这些控件无法访问。
b)是否有任何想法让我的用户控件与装饰者互动?
答案 0 :(得分: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;
如果有帮助,请告诉我。
答案 1 :(得分: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>
不要在usercontrol上设置宽度,因为它应该伸展,如果需要,请使用d:DesignWidth / Height。订单很重要,最后一个是在同一行内的其他订单。如果您只想占用第3行,请更改行和行数。