Procedure: Een bestand openen dat is neergezet op een RichTextBox-veld
In Windows Presentation Foundation (WPF) hebben de TextBox, RichTextBoxen FlowDocument allemaal ingebouwde functionaliteit voor slepen en neerzetten. Met de ingebouwde functionaliteit kunt u tekst slepen en neerzetten binnen en tussen de besturingselementen. Het is echter niet mogelijk om een bestand te openen door het op de bediening te slepen en neer te laten. Met deze elementen worden ook de gebeurtenissen voor slepen en neerzetten als afgehandeld gemarkeerd. Als gevolg hiervan kunt u standaard uw eigen gebeurtenis-handlers niet toevoegen om functionaliteit te bieden voor het openen van verwijderde bestanden.
Als u extra verwerking wilt toevoegen voor slepen en neerzetten in deze besturingselementen, gebruik methode AddHandler(RoutedEvent, Delegate, Boolean) om uw event handlers toe te voegen voor de gebeurtenissen voor slepen en neerzetten. Stel de parameter handledEventsToo
in op true
om ervoor te zorgen dat de opgegeven handler wordt aangeroepen voor een gerouteerde gebeurtenis die al is gemarkeerd als verwerkt door een ander element langs de gebeurtenisroute.
Tip
U kunt de ingebouwde functionaliteit voor slepen en neerzetten van TextBox, RichTextBoxen FlowDocument vervangen door het verwerken van de voorbeeldversies van de sleep-en-neerzet-gebeurtenissen en de voorbeeldgebeurtenissen als verwerkt te markeren. Hierdoor wordt echter de ingebouwde functionaliteit voor slepen en neerzetten uitgeschakeld en wordt dit niet aanbevolen.
Voorbeeld
In het volgende voorbeeld ziet u hoe u handlers toevoegt voor de DragOver- en Drop-gebeurtenissen op een RichTextBox. In dit voorbeeld wordt de methode AddHandler(RoutedEvent, Delegate, Boolean) gebruikt en wordt de parameter handledEventsToo
ingesteld op true
, zodat de gebeurtenis-handlers worden aangeroepen, ook al worden deze gebeurtenissen door de RichTextBox gemarkeerd als verwerkt. De code in de gebeurtenishandlers voegt functionaliteit toe om een tekstbestand te openen dat op de RichTextBoxis neergezet.
Als u dit voorbeeld wilt testen, sleept u een tekstbestand of rtf-bestand (RTF) van Windows Verkenner naar het RichTextBox. Het bestand wordt geopend in de RichTextBox. Als u op Shift drukt voordat u het bestand neerlegt, wordt het bestand geopend als tekst zonder opmaak.
<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