我在usercontrol中有一个文本框和按钮。 usercontrol位于主窗口的ContentControl中
<TextBox x:Name="FilePathTextBox" Grid.Column="0" HorizontalAlignment="Stretch" Margin="0,0,5,0" Text="{Binding SurfaceFile, Mode=TwoWay}" MinWidth="150"
AllowDrop="True" PreviewDragEnter="TextBox_PreviewDragEnter" PreviewDragOver="TextBox_PreviewDragEnter" PreviewDrop="TextBox_PreviewDrop"></TextBox>
我在xaml.cs中有以下代码
private string[] allowedFileExtensions = { ".XML", ".TXT"};
bool Is_AllowedFile(string fileExtension)
{
return allowedFileExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
}
private void TextBox_PreviewDragEnter(object sender, DragEventArgs e)
{
bool dropEnabled = true;
if (e.Data.GetDataPresent(DataFormats.FileDrop, true))
{
string[] droppedFilePaths = e.Data.GetData(DataFormats.FileDrop, true) as string[];
if (droppedFilePaths.Count() > 1 || !Is_AllowedFile(System.IO.Path.GetExtension(droppedFilePaths[0])))
dropEnabled = false;
}
else
{
dropEnabled = false;
}
if (!dropEnabled)
{
e.Effects = DragDropEffects.None;
e.Handled = true;
}
}
private void TextBox_PreviewDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] droppedFilePaths = e.Data.GetData(DataFormats.FileDrop, true) as string[];
FilePathTextBox.Text = droppedFilePaths[0];
}
}
TextBox_PreviewDrop永远不会被触发。 这个实现是正确的还是有一个更好/更简单的解决方案? 提前谢谢。
答案 0 :(得分:0)
您应该将PreviewDragEnter处理程序结束时的条件更改为:
if (dropEnabled)
{
e.Effects = DragDropEffects.All;
e.Handled = true;
}