我在我的應用程序中有一個DataGrid
控件,其中我爲某些操作添加了自定義的Popup
。 基本的東西是:我有一個double
數字顯示在DataGrid
矩陣。右擊選中的單元格會彈出一個彈出窗口,用戶可以在其中鍵入一個值,然後按回車鍵移動所選值(所有選定的值將隨着輸入的值而遞增)如何在鼠標位置上方顯示彈出窗口?
這是當前行爲:
而對於彈出窗口中的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
。當我嘗試在DataGrid
上直接添加ContextMenu
時,我可以在網格初始化之前看到它,但之後僅顯示Popup
。根本沒有ContextMenu
。 我期待他們在相同的位置,但ContextMenu
只是不會出現。
理想是什麼我需要的是一個類似Office的ContextMenu
:
在其中我移彈出窗口將顯示鼠標指針上面,我的ContextMenu
在通常位置。
如果需要,我不會在乎有一個固定的佈局(上面的佈局/ contextmenu下,無論鼠標位置)。
你有什麼想法如何做到這一點?
或者,我正在考慮在contextMenu中包含Popup
內容,希望它不會變得醜陋。
感謝您的幫助!
試圖通過將它的IsOpen屬性爲true,以手動打開文本菜單。此外,嘗試尋找StaysOpen屬性,如果它以某種方式幫助你:http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.popup.staysopen.aspx – decyclone
已經開始工作了,Popup到目前爲止工作得很好,我對這個Popup的唯一問題是將它的位置設置在鼠標位置上方(默認情況下,它位於鼠標位置下)。ContextMenu似乎是某種Popup在這裏的「重載」,可能是由於MouseRightButtonUp上的覆蓋:/ – Damascus
你有沒有嘗試設置它的Placement屬性? http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.popup.placement.aspx – decyclone