Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No WPF (Windows Presentation Foundation), os controles TextBox, RichTextBoxe FlowDocument têm funcionalidade interna de arrastar e soltar. A funcionalidade interna permite arrastar e soltar o texto dentro e entre os controles. No entanto, ela não habilita a abertura de um arquivo soltando-o no controle. Esses controles também marcam os eventos do tipo "arrastar e soltar" como manipulados. Como resultado, por padrão, você não pode adicionar seus próprios manipuladores de eventos para fornecer funcionalidade para abrir arquivos descartados.
Para adicionar tratamento adicional para eventos de arrastar e soltar nesses controles, use o método AddHandler(RoutedEvent, Delegate, Boolean) para adicionar seus manipuladores de eventos para os eventos de arrastar e soltar. Defina o parâmetro handledEventsToo como true para que o manipulador especificado seja invocado para um evento roteado que já foi marcado como manipulado por outro elemento ao longo da rota do evento.
Dica
Você pode substituir a funcionalidade interna de arrastar e soltar de TextBox, RichTextBox e FlowDocument, manipulando as versões de pré-visualização dos eventos de arrastar e soltar e marcando os eventos de pré-visualização como manipulados. No entanto, isso desabilitará a funcionalidade interna de arrastar e soltar e não é recomendado.
Exemplo
O exemplo a seguir demonstra como adicionar manipuladores para os eventos DragOver e Drop em um RichTextBox. Este exemplo usa o método AddHandler(RoutedEvent, Delegate, Boolean) e define o parâmetro handledEventsToo como true para que os manipuladores de eventos sejam invocados mesmo que o RichTextBox marque esses eventos como manipulados. O código nos manipuladores de eventos adiciona funcionalidade para abrir um arquivo de texto que foi solto no RichTextBox.
Para testar este exemplo, arraste um arquivo de texto ou um arquivo RTF (rich text format) do Windows Explorer para o RichTextBox. O arquivo será aberto no RichTextBox. Se você pressionar a tecla SHIFT antes de remover o arquivo, o arquivo será aberto como texto sem formatação.
<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