Gewusst wie: Öffnen einer Datei, die auf einem RichTextBox-Steuerelement abgelegt ist
In Windows Presentation Foundation (WPF) verfügen die TextBox-, RichTextBox- und FlowDocument-Steuerelemente über 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 aktiviert, indem die Datei auf dem Steuerelement gelöscht wird. 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.
Verwenden Sie die AddHandler(RoutedEvent, Delegate, Boolean)-Methode, um zusätzliche Behandlung für Drag-and-Drop-Ereignisse in diesen Steuerelementen hinzuzufügen, um Die Ereignishandler für die Drag-and-Drop-Ereignisse hinzuzufügen. Legen Sie handledEventsToo
-Parameter auf true
fest, damit der bereitgestellte Handler für ein Routingereignis aufgerufen wird, das bereits von einem anderen Element auf der Ereignisroute als behandelt markiert wurde.
Tipp
Sie können die integrierte Drag-and-Drop-Funktion von TextBox, RichTextBox und FlowDocument durch behandeln sie die Vorschauversionen der Drag-and-Drop-Ereignisse und das Markieren der Vorschauereignisse als behandelt. Dies deaktiviert jedoch die integrierte Drag-and-Drop-Funktionalität und wird nicht empfohlen.
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie Sie Handler für die DragOver- und Drop-Ereignisse einer RichTextBox hinzufügen. In diesem Beispiel wird die AddHandler(RoutedEvent, Delegate, Boolean)-Methode verwendet und der handledEventsToo
-Parameter auf true
festgelegt, sodass die Ereignishandler aufgerufen werden, obwohl diese RichTextBox-Ereignisse behandelt werden. Der Code in den Ereignishandlern fügt Funktionen zum Öffnen einer Textdatei hinzu, die auf der RichTextBox abgelegt werden.
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 der 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