所以我在wpf中的ListView上设置了拖放功能,如此
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"
<ListView>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Drop">
<Command:EventToCommand Command="{Binding DropFiles}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
在我看来模特我有
private RelayCommand<DragEventArgs> _dropFiles;
/// <summary>
/// Gets the DropFiles.
/// </summary>
public RelayCommand<DragEventArgs> DropFiles
{
get
{
return _dropFiles
?? (_dropFiles = new RelayCommand<DragEventArgs>(
args =>
{
//Do Something with args
}));
}
}
这在调试模式下工作正常,但是当我部署此版本时,当我尝试将文件拖放到列表视图中时,会出现以下图标:
有没有人知道为什么会这样?
更新
如果我以管理员身份运行我的项目,那么拖放功能就像所描述的那样被破坏,就好像我以管理员身份运行我的项目,拖放功能正常工作。为什么会这样?
答案 0 :(得分:1)
所以我并不完全理解这一点,但看起来安全就是问题
用户界面权限隔离(UIPI)
好的,回到我们的阻力和 drop issue ...一种与MIC结合使用的“姐妹”技术 是UIPI。 UIPI使用a阻止从进程发送的Windows消息 将MIC水平降低到以更高MIC水平运行的水平。拖放是 通过Windows消息实现。因此,如果你尝试和 将文件从Windows资源管理器(中等MIC)拖放到记事本 运行提升(高MIC),Windows消息被阻止和 拖放不起作用。
您可以在应用程序中使用ChangeWindowsMessageFilterEx来允许 指定的Windows消息不被阻止。不幸的是,这个 不建议将其作为拖放的安全解决方案 拖放使用的消息。
<强>好。现在什么?
最好的解决方案是只使用拖放 相同的MIC水平。启用UAC后,Windows资源管理器将在a运行 中等MIC水平。因此,您的应用程序(记事本在我们的 例如)需要以中等(或更低)MIC水平运行。底线 如果您的,从Windows资源管理器拖放将无法正常工作 申请提升。如果你发现自己处于这种状况,那么你 可能需要重新考虑您的应用程序设计或不支持 在启用UAC的情况下进行拖放。