0

我有一个包含三行的网格。第一行包含哪个显示工具栏。第二行包含显示状态栏。第三行包含绑定到可观察集合的数据的列表框。

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

我想使用弹出窗口,弹出窗口的问题是当我移动窗口时它不会随父控件一起移动。

所以我决定创建一个用户控件(比如 mypopup),它以编程方式添加到具有更高 ZIndex 的第二行,问题是即使我设置了更高的索引,它也会落后于 ListboxItems。

a)对此有任何解决方案吗?

作为一种解决方案,我认为将 Adorner 用于该用户控件(mypopup),问题是我的用户控件(mypopup)包含按钮和复选框,在应用装饰器后,这些控件无法访问。

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

4

2 回答 2

1

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

仅使用弹出窗口。设置它们的放置目标和放置方向。下面的弹出窗口位于按钮的左上角。

        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; 

让我知道这是否有帮助。

于 2011-09-26T08:19:04.030 回答
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>

叠加控制:

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

不要在用户控件上设置宽度,因为它应该伸展,如果需要,请使用 d:DesignWidth/Height。顺序很重要,最后一个在同一排的其他人之上。如果您只希望它占据第三行,请更改行和行跨度。

于 2011-09-26T08:36:50.550 回答