2013-05-09 56 views
0

我在這裏有兩個問題。我有一個DataGrid填充了一些項目。我想要發生的是在DataGrid選定行下顯示一個Popup控件。下面是我有:Datagrid彈出控件

<Grid> 
    <DataGrid CanUserReorderColumns="False" 
       CanUserSortColumns="False" 
       HeadersVisibility="None" 
       AutoGenerateColumns="False" 
       VerticalAlignment="Stretch" 
       ItemsSource="{Binding ItemCollection}" 
       SelectedItem="{Binding SelectedItem}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Width="*" Binding="{Binding Path=Key}" /> 
      <DataGridTextColumn Width="*" Binding="{Binding Path=Value}" /> 
     </DataGrid.Columns> 
    </DataGrid> 

    <Popup PopupAnimation="Scroll" Placement="Bottom" AllowsTransparency="True" IsOpen="{Binding PopupVisible}" Margin="0" StaysOpen="True" > 
     <local:PopupControl /> 
    </Popup> 
</Grid> 

我設置IsOpen屬性在我的視圖模型時的SelectedItem改變,像這樣:

PopupVisible = true; 

有了這個代碼,我能夠展現酥料餅。

第一期: With StaysOpen =「True」當窗口移動時,彈出窗口不會移動。我使用Button控件處理這個問題的方式是將StaysOpen更改爲「False」,以便在單擊窗口中的其他位置時彈出窗口被解除。當我使用DataGrid控件執行此操作時,SelectedItem更改時彈出窗口根本不顯示。爲什麼是這樣?

第二期:如何讓彈出窗口顯示在選定的行下?

+0

在彈出的xaml塊中,更改Placement =「MousePoint」,然後在DataGrid的單元格單擊事件中更改IsOpen =「True」。 – KbManu 2013-05-09 01:03:00

回答

1

此解決方案的代碼爲我工作:

第一期: 當您最初打開彈出式窗口,保存窗口座標。

Point coordinate = mainWindow.PointFromScreen(new Point(0,0)); 
xSavedWindowPos = coordinate.X; 
ySavedWindowPos = coordinate.Y; 

在您的LocationChanged事件處理函數mainWindow中:設置彈出偏移量並保存新的窗口位置。

Point currentPos = (sender as Window).PointFromScreen(new Point(0,0)); 
yourPopup.HorizontalOffset += (xSavedWindowPos - currentPos.X); 
yourPopup.VerticalOffset += (ySavedWindowPos - currentPos.Y); 
xSavedWindowPos = currentPos.X; 
ySavedWindowPos = currentPos.Y; 

第二期:在DataGrid的 「CellMouseClick」 事件處理程序打開彈出窗口。你也可以設置StaysOpen。

+0

DataGrid控件中似乎沒有CellMouseClick事件處理程序。有沒有一些圖書館或者其他的東西可以增加這些?另外,有什麼辦法可以使用MVVM來做到這一點? – Chris 2013-05-09 21:44:29

+0

DataGrid控件最初並不存在於WPF中。所以,在WPF應用程序中,我使用了WinForms的datagrid控件。這已經得到了CellMouseClick事件。可能會有類似的事件發生。你的第一個問題怎麼樣? – KbManu 2013-05-10 00:12:04

+0

使用DataGrid控件中的鼠標左鍵按下事件進行檢查。如果您完成了彈出式菜單的「Placement」屬性(Placement =「MousePoint」),則可以在該點上彈出。否則你需要檢查其他相關事件。 – KbManu 2013-05-10 01:06:03

0

我有一個類似的問題,您是否使用彈出控件的Ajax?

這是使用它的ajax

頁面上方的在正常的代碼,我該怎麼辦

 <cc1:ModalPopupExtender ID="ModalPopupExtender_View" runat="server" 
          PopupControlID="popView" CancelControlID="cmdViewClose" TargetControlID="hidForModel" PopupDragHandleControlID="Panel1" 
          DropShadow="true" BackgroundCssClass="modalBackground" RepositionMode="None"></cc1:ModalPopupExtender> 

隱藏字段是什麼套在頁面上的彈出式視窗的位置

對於按鈕單擊可以使用 ModalPopupExtender_View.Show(); 在後面