2011-09-24 50 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; 

讓我知道這是否有幫助。