Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In Windows Presentation Foundation (WPF) haben die TextBox, RichTextBox und FlowDocument Steuerelemente alle integrierte Drag-and-Drop-Funktionen. Die integrierte Funktionalität ermöglicht das Ziehen und Ablegen von Text innerhalb und zwischen den Steuerelementen. Das Öffnen einer Datei wird jedoch nicht durch Ablegen der Datei im Steuerelement aktiviert. Diese Steuerelemente markieren auch die Drag-and-Drop-Ereignisse als behandelt. Daher können Sie standardmäßig keine eigenen Ereignishandler hinzufügen, um Funktionen zum Öffnen abgelegter Dateien bereitzustellen.
Um zusätzliche Verarbeitung für Drag-and-Drop-Ereignisse in diesen Steuerelementen hinzuzufügen, verwenden Sie die AddHandler(RoutedEvent, Delegate, Boolean) Methode, um die Ereignishandler für die Drag-and-Drop-Ereignisse hinzuzufügen. Stellen Sie den handledEventsToo
-Parameter auf true
ein, damit der angegebene Handler für ein geroutetes Ereignis aufgerufen wird, das bereits von einem anderen Element entlang der Ereignisroute als bearbeitet markiert wurde.
Tipp
Sie können die integrierten Drag-and-Drop-Funktionen von TextBox, RichTextBox und FlowDocument ersetzen, indem Sie die Vorschau der Drag-and-Drop-Ereignisse behandeln und diese Vorschauereignisse als bearbeitet markieren. Dies deaktiviert jedoch die integrierte Drag-and-Drop-Funktion und wird nicht empfohlen.
Beispiel
Das folgende Beispiel veranschaulicht das Hinzufügen von Handlern für die DragOver Und Drop Ereignisse in einem RichTextBox. In diesem Beispiel wird die AddHandler(RoutedEvent, Delegate, Boolean) Methode verwendet und der handledEventsToo
Parameter auf true
gesetzt, damit die Ereignishandler aufgerufen werden, obwohl die RichTextBox diese Ereignisse als behandelt markiert. Der Code in den Ereignishandlern fügt Funktionen zum Öffnen einer Textdatei hinzu, die in der RichTextBoxDatei abgelegt wird.
Um dieses Beispiel zu testen, ziehen Sie eine Textdatei oder eine RTF-Datei (Rich Text Format) von Windows Explorer in den RichTextBox. Die Datei wird in RichTextBox geöffnet. Wenn Sie vor dem Ablegen der Datei die UMSCHALTTASTE drücken, wird die Datei als Nur-Text geöffnet.
<RichTextBox x:Name="richTextBox1"
AllowDrop="True" />
public MainWindow()
{
InitializeComponent();
// Add using System.Windows.Controls;
richTextBox1.AddHandler(RichTextBox.DragOverEvent, new DragEventHandler(RichTextBox_DragOver), true);
richTextBox1.AddHandler(RichTextBox.DropEvent, new DragEventHandler(RichTextBox_Drop), true);
}
private void RichTextBox_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effects = DragDropEffects.All;
}
else
{
e.Effects = DragDropEffects.None;
}
e.Handled = false;
}
private void RichTextBox_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] docPath = (string[])e.Data.GetData(DataFormats.FileDrop);
// By default, open as Rich Text (RTF).
var dataFormat = DataFormats.Rtf;
// If the Shift key is pressed, open as plain text.
if (e.KeyStates == DragDropKeyStates.ShiftKey)
{
dataFormat = DataFormats.Text;
}
System.Windows.Documents.TextRange range;
System.IO.FileStream fStream;
if (System.IO.File.Exists(docPath[0]))
{
try
{
// Open the document in the RichTextBox.
range = new System.Windows.Documents.TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);
fStream = new System.IO.FileStream(docPath[0], System.IO.FileMode.OpenOrCreate);
range.Load(fStream, dataFormat);
fStream.Close();
}
catch (System.Exception)
{
MessageBox.Show("File could not be opened. Make sure the file is a text file.");
}
}
}
}
Public Sub New()
InitializeComponent()
richTextBox1.AddHandler(RichTextBox.DragOverEvent, New DragEventHandler(AddressOf RichTextBox_DragOver), True)
richTextBox1.AddHandler(RichTextBox.DropEvent, New DragEventHandler(AddressOf RichTextBox_Drop), True)
End Sub
Private Sub RichTextBox_DragOver(sender As Object, e As DragEventArgs)
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effects = DragDropEffects.All
Else
e.Effects = DragDropEffects.None
End If
e.Handled = False
End Sub
Private Sub RichTextBox_Drop(sender As Object, e As DragEventArgs)
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim docPath As String() = TryCast(e.Data.GetData(DataFormats.FileDrop), String())
' By default, open as Rich Text (RTF).
Dim dataFormat = DataFormats.Rtf
' If the Shift key is pressed, open as plain text.
If e.KeyStates = DragDropKeyStates.ShiftKey Then
dataFormat = DataFormats.Text
End If
Dim range As TextRange
Dim fStream As IO.FileStream
If IO.File.Exists(docPath(0)) Then
Try
' Open the document in the RichTextBox.
range = New TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd)
fStream = New IO.FileStream(docPath(0), IO.FileMode.OpenOrCreate)
range.Load(fStream, dataFormat)
fStream.Close()
Catch generatedExceptionName As System.Exception
MessageBox.Show("File could not be opened. Make sure the file is a text file.")
End Try
End If
End If
End Sub
.NET Desktop feedback