Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Di Windows Presentation Foundation (WPF), kontrol TextBox, RichTextBox, dan FlowDocument memiliki fungsionalitas seret dan letakkan bawaan. Fungsionalitas bawaan memungkinkan seret dan letakkan teks di dalam dan di antara kontrol. Namun, itu tidak memungkinkan pembukaan file dengan menjatuhkan file ke kontrol. Kontrol ini juga menandai peristiwa seret dan letakkan sebagai ditangani. Akibatnya, secara default, Anda tidak dapat menambahkan penanganan aktivitas Anda sendiri untuk menyediakan fungsionalitas untuk membuka file yang dihilangkan.
Untuk menambahkan penanganan tambahan untuk peristiwa seret dan letakkan dalam kontrol ini, gunakan metode AddHandler(RoutedEvent, Delegate, Boolean) untuk menambahkan penanganan aktivitas Anda untuk peristiwa seret dan letakkan. Atur parameter handledEventsToo
ke true
agar handler yang ditentukan dipanggil untuk peristiwa rute yang telah ditandai sebagai ditangani oleh elemen lain di sepanjang rute peristiwa.
Petunjuk / Saran
Anda dapat mengganti fungsi bawaan tarik dan lepas TextBox, RichTextBox, dan FlowDocument dengan menangani versi pratinjau dari acara tarik dan lepas serta menandai acara pratinjau tersebut sebagai telah ditangani. Namun, ini akan menonaktifkan fungsionalitas seret dan letakkan bawaan, dan tidak disarankan.
Contoh
Contoh berikut menunjukkan cara menambahkan handler untuk peristiwa DragOver dan Drop pada RichTextBox. Contoh ini menggunakan metode AddHandler(RoutedEvent, Delegate, Boolean) dan mengatur parameter handledEventsToo
ke true
sehingga penanganan peristiwa akan dipanggil meskipun RichTextBox menandai peristiwa ini sebagai ditangani. Kode dalam penanganan aktivitas menambahkan fungsionalitas untuk membuka file teks yang dihilangkan pada RichTextBox.
Untuk menguji contoh ini, seret file teks atau file format teks kaya (RTF) dari Windows Explorer ke RichTextBox. Berkas akan dibuka di RichTextBox. Jika Anda menekan tombol SHIFT sebelum menjatuhkan file, file akan dibuka sebagai teks biasa.
<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