2016-06-16 19 views
0

グリッドはテキストボックス間のドラッグ/ドロップ領域として機能しますが、その間に配置するとテキストボックスが移動します。ドラッグ&ドロップグリッドがテキストボックスの背後にあるように、どうやってドラッグできますか?(xaml/wpf)でないグリッド上にコントロールをオーバーレイする方法

第1グリッドは、ドラッグ/ドロップ領域であり、以下のテキストボックスのコードである:ブラックボックスは、テキストボックスであり、赤色で囲まれたすべてがここグリッド領域である

<Grid Grid.Column="0" Height="Auto" Width="20" AllowDrop="True" Background="White" 
     DragEnter="Grid_DragEnter" DragLeave="Grid_DragLeave" Drop="Grid_Drop" Tag="{Binding}"/> 

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <TextBlock HorizontalAlignment="Left" Margin="5,2" 
     Text="some text" 
     VerticalAlignment="Center" FontSize="5" /> 
</Grid> 

A picture of what I mean、物事を引きずり落とすことができます。

+0

は、あなたがそれをスクリーン印刷することができますか? –

+0

私がテキストボックスに入れたものは単なるフィラーです。オリジナルは異なっていて、単にスクリーン印刷することはできません。 @FirstStep –

+0

2つのテキストボックスを含むグリッド上にすべてのドラッグ/ドロップイベントを配置します。または親が何であれ。 –

答えて

1

これは私のために働く。コードビハインドは軽度のバマーであり、特に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; 
    } 
} 
関連する問題