我的应用程序中有一个DataGrid
控件,我在其中Popup
为某些操作添加了自定义项。基本的事情是:我有一个double
数字矩阵显示在DataGrid
. 右键单击选定的单元格将出现一个弹出窗口,用户可以在其中键入一个值,然后按 Enter 以移动选定的值(所有选定的值都将随着输入的值递增)
这是当前的行为:
以及弹出窗口的 XAML 代码:
<Style x:Key="ShiftPopupStyle" TargetType="{x:Type Popup}">
<Setter Property="IsOpen" Value="False" />
<Setter Property="StaysOpen" Value="False" />
<Setter Property="AllowsTransparency" Value="True" />
<Setter Property="PopupAnimation" Value="Fade" />
<Setter Property="Placement" Value="Mouse" />
<Setter Property="Child">
<Setter.Value>
<Border BorderBrush="Navy" Background="AliceBlue" BorderThickness="1" CornerRadius="2">
<StackPanel Orientation="Horizontal" Margin="5">
<TextBox Text="{Binding ShiftValue, UpdateSourceTrigger=PropertyChanged}" Width="30" Margin="4" >
<TextBox.InputBindings>
<KeyBinding Command="{Binding ShiftCommand}" Key="Enter" />
</TextBox.InputBindings>
</TextBox>
<Button Content="Shift" Margin="0,4,0,4"
Command="{Binding ShiftCommand}"/>
</StackPanel>
</Border>
</Setter.Value>
</Setter>
</Style>
这是我打开的Popup
方法,这个方法位于我的自定义中DataGrid
(我使用自定义DataGrid
能够显示二维数组中的值):
protected override void OnMouseRightButtonUp(System.Windows.Input.MouseButtonEventArgs e)
{
if (!this.IsReadOnly)
{
this.shiftPopup.IsOpen = true;
}
base.OnMouseRightButtonUp(e);
}
现在,我需要在ContextMenu
我的DataGrid
. 当我尝试ContextMenu
直接在 上添加 a 时DataGrid
,我可以在网格初始化之前看到它,但之后只Popup
显示。完全没有ContextMenu
。我原以为他们会在同一个位置,但ContextMenu
只是不会出现。
理想情况下,我需要的是类似 Office 的ContextMenu
:
其中,我的 shift Popup 将出现在鼠标指针上方,而 myContextMenu
在通常的位置。
如果需要,我不在乎有一个固定的布局(上面的布局/下面的上下文菜单,无论鼠标位置是什么)。
你对如何做到这一点有任何想法吗?
或者,我正在考虑将Popup
内容包含在 contextMenu 中,希望它最终不会变得丑陋。
谢谢你的帮助!