0

我这里有两个问题。我有一个填充了一些项目的 DataGrid。我想要发生的是在 DataGrid 选定行下显示一个 Popup 控件。这是我所拥有的:

<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>

当 SelectedItem 像这样更改时,我在 ViewModel 中设置 IsOpen 属性:

PopupVisible = true;

使用此代码,我可以显示弹出框。

第一个问题:使用 StaysOpen = "True" 移动窗口时弹出窗口不会移动。我使用 Button 控件处理此问题的方法是将 StaysOpen 更改为“False”,以便在单击窗口中的其他位置时关闭弹出窗口。当我使用 DataGrid 控件执行此操作时,当 SelectedItem 更改时,弹出窗口根本不会显示。为什么是这样?

第二个问题:如何让弹出窗口显示在所选行下?

4

2 回答 2

1

这个解决方案对我有用:

第一个问题: 最初打开弹出窗口时,保存窗口坐标。

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

在 mainWindow 的 LocationChanged 事件处理程序中:设置弹出偏移并保存新的窗口位置。

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;

第二个问题:在数据网格的“CellMouseClick”事件处理程序中打开弹出窗口。您也可以设置 StaysOpen。

于 2013-05-09T01:49:48.627 回答
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(); 在后面的代码中

于 2013-05-09T00:35:40.800 回答