Datagrid上的弹出控件

时间:2013-05-09 00:09:06

标签: c# wpf mvvm datagrid popup

我在这里有两个问题。我有一个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 =&#34; True&#34;移动窗口时弹出窗口不会移动。我使用Button控件处理此方法的方法是将StaysOpen更改为&#34; False&#34;这样当单击窗口中的其他位置时弹出窗口就会被取消。当我使用DataGrid控件执行此操作时,弹出窗口在SelectedItem更改时根本不显示。这是为什么?

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

2 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:0)

我遇到了类似的问题,您是否使用Ajax进行弹出控制?

这就是我使用ajax

的方式

在TOP页面下正常代码

        <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(); 在

背后的代码中