これは私のために働く。コードビハインドは軽度のバマーであり、特にdroptargetを名前で参照しています。それをdroptarget要素にバインドした添付プロパティにするのは簡単でしょう。これはテンプレートなどでの使用に便利です。コードビハインドなしでドラッグ&ドロップすることはできません。時には人生はコードビハインドをもたらします。それを使って、ええと、レモンを作る。
このXAMLの多くは、あなたのやり方と同じように要素が重なり合うようにしているだけです。重複するレイアウトには、Grid.Column
/Grid.ColumnSpan
のものが重要です。
テキストボックスは、DragOver
ではなく、PreviewDragOver
イベントを使用することに注意してください。 DragOver
が呼び出されていませんでした。それがバグか間違った理解かどうかは分かりませんが、多くの人がDragOver
をWPF TextBox
と連携させるのに問題があるようです。
XAML:背後
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="80,0,80,0"
Height="80"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Drop="TextBox_Drop"
DragOver="TextBox_DragOver"
Background="DeepSkyBlue"
x:Name="DropTargetGrid"
AllowDrop="True"
></Grid>
<TextBox
Grid.Column="0"
Margin="40,40,10,40"
Drop="TextBox_Drop"
PreviewDragOver="TextBox_DragOver"
AllowDrop="True"
VerticalAlignment="Center"
/>
<TextBox
Grid.Column="1"
Margin="10,40,40,40"
Drop="TextBox_Drop"
PreviewDragOver="TextBox_DragOver"
AllowDrop="True"
VerticalAlignment="Center"
/>
</Grid>
コード:
private void TextBox_Drop(object sender, DragEventArgs e)
{
// Do whatever
}
private void TextBox_DragOver(object sender, DragEventArgs e)
{
var ptTargetClient = e.GetPosition(DropTargetGrid);
if (ptTargetClient.X >= 0 && ptTargetClient.X <= DropTargetGrid.ActualWidth
&& ptTargetClient.Y >= 0 && ptTargetClient.Y <= DropTargetGrid.ActualHeight)
{
e.Handled = true;
e.Effects = DragDropEffects.Move;
}
}
は、あなたがそれをスクリーン印刷することができますか? –
私がテキストボックスに入れたものは単なるフィラーです。オリジナルは異なっていて、単にスクリーン印刷することはできません。 @FirstStep –
2つのテキストボックスを含むグリッド上にすべてのドラッグ/ドロップイベントを配置します。または親が何であれ。 –