アプリケーションに、いくつかのアクション用に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
です。このメソッドはカスタムにあります( 2D配列から値を表示できるDataGrid
カスタムを使用しています):DataGrid
protected override void OnMouseRightButtonUp(System.Windows.Input.MouseButtonEventArgs e)
{
if (!this.IsReadOnly)
{
this.shiftPopup.IsOpen = true;
}
base.OnMouseRightButtonUp(e);
}
ContextMenu
ここで、 に aを追加する必要がありDataGrid
ます。ContextMenu
に直接追加しようとするとDataGrid
、グリッドが初期化される前に表示されますが、その後は のみがPopup
表示されます。いいえContextMenu
。同じ場所にあると思っていましたが、表示されContextMenu
ません。
理想的には、私が必要とするのは Office のようなものContextMenu
です:
シフトポップアップがマウスポインターの上に表示ContextMenu
され、通常の位置に表示されます。
必要に応じて、固定レイアウト (上にレイアウト/下にコンテキスト メニュー、マウスの位置に関係なく) を使用してもかまいません。
そうする方法について何か考えがありますか?
あるいは、Popup
contextMenu にコンテンツを含めることを考えていました。
ご協力いただきありがとうございます!