2011-12-15 2 views
0

私は、スキーマエクスプローラー(TreeView)のSQLテーブルをCanvasにドラッグしてテーブル間の関連付けを行うことができるWPFデータビジュアライザーを作成しています。ユーザーがテーブルの名前が含まれており、上のコントロールを周りにドラッグしてなる、TextBlockの上でクリックできるようにするために私は何を達成したいことはあるドラッグハンドルを使用したWPFコントロールの作成

<UserControl> 
    <Border Thickness="2"> 
     <DockPanel LastChildFill="True"> 
      <TextBlock DockPanel.Dock="Top" Text="{Binding TableName}" /> 
      <ListBox ItemsSource="{Binding Columns}" /> 
     </DockPanel> 
    </Border> 
</UserControl> 

:表コントロールをXAMLでこのような何かを定義していますそれを再配置するキャンバス。今度は、コントロール全体がドラッグハンドルであるところでドラッグ移動を実装する方法についてはplentyofexamplesがありますが、ListBoxにはテーブルの列のリストが含まれているため、ハンドルをTextBlockだけに制限したい他のテーブルの列にドラッグアンドドロップして関連付けを定義することができます)。

誰もこのようなものを実装できましたか?

答えて

0

私はそのようなものを少し前に実装しました。

私のすべてのドラッグ可能なコントロールは、同じベースコントロールから継承されています。ベースコントロールにPART_DragHandleというFrameworkElementという名前のVisualTreeをチェックするイベントがLoadedであり、見つかった場合はドラッグを開始するためにそのコントロールを使用するようドラッグ/ドロップコードに指示します。見つからない場合は、コントロール全体を使用します。

私が始めたドラッグ・ドロップ・コードはBea Stollnitz's blogですが、私はそれをかなり変更しました。私は彼女のコードが含まれて何を覚えていないが、私はDragHandleのカスタムたDependencyPropertyを持っていたし、このような何か使用して設定できますVisualTreeをナビゲートし、私のドラッグハンドルを見つけるには

void UserControl_Loaded(object sender, EventArgs e) 
{ 
    DependencyObject control = sender as DependencyObject; 
    if (control == null) return; 

    var dragHandle = VisualTreeHelpers.FindChild<FrameworkElement>(
     control, "PART_DragHandle"); 

    if (dragHandle != null) 
     this.dragDropManager.SetDragHandle(dragHandle); 
    else 
     this.dragDropManager.SetDragHandle(control); 
} 

を、私はいくつかのヘルパークラスを使用しました私はhereを投稿しました。

関連する問題