2015-01-29 43 views
5

&'u bir Stackpanel düğmesinden başka bir Stackpanel'a sürüklemek istiyorum. Uygulama hala çalışıyor, ancak Düğme'nin, Drag Event sırasında görsel bir Geri Bildirim olarak fare imlecine eklenmesini istiyorum.WPF Sürükle & Bırak, DragOver

Bütün gün bir çözüm arıyordum, ancak sadeceile değil, Stackpanels ile ilgili çözümleri buluyorum.

Button.xaml

<UserControl x:Class="LisaBeispiel2.Controls.ImageButton" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Name="IB" 
    AllowDrop="True"> 


<Grid> 
    <Button Margin="3 0 3 3" 
      VerticalAlignment="Top" 
      HorizontalAlignment="Left" 
      IsEnabled="{Binding IsButtonEnabled, ElementName=IB}"> 
     <StackPanel Orientation="Vertical"> 
      <Image Source="{Binding ElementName=IB, Path=Image}" 
        Width="35" 
        Height="35" 
        Margin="8" /> 
      <TextBlock Text="{Binding ElementName=IB, Path=Text}" 
         Foreground="White" 
         FontSize="10" 
         FontFamily="Arial" 
         TextWrapping="Wrap" 
         TextAlignment="Center" /> 
     </StackPanel> 
    </Button> 

</Grid> 

Button.xaml.cs

protected override void OnMouseMove(MouseEventArgs e) 
    { 
     base.OnMouseMove(e); 
     if (e.LeftButton == MouseButtonState.Pressed) 
     { 
      // Package the data into a Dataobject 
      DataObject data = new DataObject(); 

      data.SetData("Object", this); 

      // Inititate the drag-and-drop operation with 3 Parameter: dragSource, data, allowedEffects 
      DragDrop.DoDragDrop(this, data, DragDropEffects.All); 
     } 
    } 

Penceresi: Burada

benim Kod olduğu .xaml

<StackPanel Orientation="Horizontal" 
       Drop="panel_Drop"> 
    <controls:ImageButton 
    Image="/LisaBeispiel2;component/Images/Icons/Rotate.png" 
    Text="Rotate"/> 
    <controls:ImageButton 
    Image="/LisaBeispiel2;component/Images/Icons/Zoom_Pan.png" 
    Text="Zoom/Pan"/> 
    </StackPanel> 
     <StackPanel Orientation="Horizontal" 
        Drop="panel_Drop"> 
    <controls:ImageButton 
    Image="/LisaBeispiel2;component/Images/Icons/ButtonPlatzhalter.png" 
    Text="Add"/> 
    <controls:ImageButton 
    Image="/LisaBeispiel2;component/Images/Icons/ButtonPlatzhalter.png" 
    Text="Add"/> 
    </StackPanel> 
    </StackPanel> 
    </StackPanel> 

Window.xaml.cs

private void panel_Drop(object sender, DragEventArgs e) 
    { 
     // If an element in the panel has already handled the drop, 
     // the panel should not also handle it. 
     if (e.Handled == false) 
     { 
      Panel _panel = (Panel)sender; 
      UIElement _element = (UIElement)e.Data.GetData("Object"); 

      if (_panel != null && _element != null) 
      { 
       // Get the panel that the element currently belongs to, 
       // then remove it from that panel and add it the Children of 
       // the panel that its been dropped on. 
       Panel _parent = (Panel)VisualTreeHelper.GetParent(_element); 

       if (_parent != null) 
       { 
        _parent.Children.Remove(_element); 
        _panel.Children.Add(_element); 

       } 

      } 
     } 
    } 
+0

Sen .. değiştirmek Bazı ana konteynerde bir satıcıya ihtiyaç duyacaktır. Bu adornere bir tuval koyabiliyor ve peşinden olduğun etkisi alabiliyorsun. Google şunu: wpf dragadorner – Brannon

cevap

0
void StackPanel_DragEnter(object sender, System.Windows.DragEventArgs e) 
{ 
    e.Effects = System.Windows.DragDropEffects.Copy; 
} 

Bu etkinliği kullanabilir ve sizin sürükle & damla olayı ile çalışır, böylece