我在这里有两个问题。我有一个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更改时根本不显示。这是为什么?
第二期:如何让弹出窗口显示在所选行下?
答案 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(); 在
背后的代码中