我试图通过调用运行计时器的bool任务在WPF应用程序中创建具有可变延迟的touch and hold事件处理程序。如果计时器过去,则任务返回true。如果发生其他事件,例如触摸离开或触摸触摸,则任务立即返回false。下面是我的事件处理程序代码:
private static async void Element_PreviewTouchDown(object sender, TouchEventArgs e)
{
// Set handled to true to avoid clicks
e.Handled = true;
var isTouchHold = await TouchHold((FrameworkElement)sender, variableTimespan);
if (isTouchHold)
TouchHoldCmd?.Execute(someParam);
else
{
// Here is where I would like to re initiate bubbling up of the event.
// This doesn't work:
e.Handled = false;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它传播事件的原因是,例如,如果用户要平移该元素所属的滚动查看器,并且通过触摸我的元素来开始平移手势,那么我的触摸保持将按预期方式工作, hold命令不会被触发,但是scrollviewer也不会开始平移。
我尝试手动引发该事件,但这似乎也不起作用:
bool firedBySelf;
private static async void Element_PreviewTouchDown(object sender, TouchEventArgs e)
{
if(firedBySelf)
{
firedBySelf = false;
return;
}
... …
Run Code Online (Sandbox Code Playgroud) 我需要构建几个需要 v120 构建工具的 C++ 项目(最初使用 VS 2013 开发)。我只能使用 VS2015(由于许可和其他公司手续,我无法安装 VS2013)。
根据多个类似的问题,例如这个问题或这个问题,我唯一的选择似乎是:
是否没有任何独立的安装程序可用于安装这些构建工具,或者我可以尝试的任何其他选项?
在 Chrome 中选择文件后,我需要获取该文件的完整客户端路径。目前,我得到的唯一路径类似于:
C:\fakepath\some_file
Run Code Online (Sandbox Code Playgroud)
我所有的谷歌搜索都让我得到以下答案:“你不能因为 HTML5 安全规范。此外,你为什么需要?你可以在不知道路径的情况下上传它。”
这是一个完美有效的答案,只是我不需要上传文件。我管理的网站可以有任意数量的管理员用户,他们通过浏览和存储大量文件的路径来配置网站。所有这些文件都存储在 Web 服务器有权访问的共享网络位置上。
这样做的全部目的是消除上传时间,防止在管理员决定更改文件时重新上传文件,并将 Web 服务器存储空间保持在最低限度。显然,Web 服务器也处理和操作这些文件。这些都是客户的要求。
Web 服务器和共享位置都位于未连接到 Internet 的内部网络上。此外,只有具有管理员角色的用户才能访问上述位置和允许他们配置这些路径的网页。安全方面,这对客户端来说已经足够了。
我们一直在使用 Internet Explorer 并将该网站添加到受信任的网站列表中,它运行良好,但现在用户正在切换到 Chrome,这是新的官方和批准的公司浏览器。Internet Explorer 将很快被淘汰。
目前,用户正在将路径复制并粘贴到输入字段中,但他们希望能够像以前一样浏览文件。
如何强制 Chrome 向我显示实际文件路径,是否有与 IE 中的受信任网站列表等效的内容,或者您将如何调整网站以适应这些条件?
寻找相同的功能BehaviorSubject
但不必提供初始值。
在从我加载数据的任何源加载数据之前,我经常需要订阅一个主题。我还需要在订阅后立即触发订阅,当且仅当next()
之前在该主题上调用过该订阅,并且我希望它向我显示最后发出的值,并且能够在任何时间点同步获取当前值,类似到value
的领域BehaviorSubject
。
这是我尝试过的:
Subject
,但它不会在订阅后立即发出旧值,BehaviorSubject
而且我无法检索当前值。ReplaySubject
缓冲区大小为 1,但这也不允许检索当前值。BehaviorSubject.create()
而不是new BehaviorSubject<Whatever>(null)
,但这在调用时不会执行任何操作next()
。不会发出任何值,并且订阅代码永远不会触发。BehaviorSubject
但.pipe(skip(1)).subscribe
如果我在调用后运行此代码,next()
那么我会丢失旧的但有效的值,只有在next
再次调用后才触发。我想到的唯一解决方案是扩展该类,ReplaySubject
为当前值添加一个私有字段(该字段在next()
调用时设置),并添加一个 getter 来检索它。
我总是希望这些值被定义并且有效,所以我不明白为什么我必须为我BehaviourSubject
特别希望不是未定义/空并相应地显式定义它们的对象类型提供默认的空/未定义值,并且然后在每个订阅中编写一个 if 语句,以在每次发出新值时检查它是否有效。
我也不明白为什么每次我在加载数据之前订阅该主题时,它必须发出该空值并导致每个订阅无缘无故地触发。
那么我错过了什么替代方案吗?
编辑:到目前为止,我的问题的答案似乎是不,没有等效的。因此,我为任何正在寻找相同行为的人提供解决方法:
import { ReplaySubject } from 'rxjs';
export class SensibleSubject<T>
{
private replaySubject: ReplaySubject<T>;
private _canGetValue = false;
private _value!: T;
public get value()
{
if (!this._canGetValue)
throw new Error("Attempted to retrieve value …
Run Code Online (Sandbox Code Playgroud) angular ×1
asynchronous ×1
c# ×1
events ×1
filepath ×1
javascript ×1
msbuild ×1
observable ×1
propagation ×1
subject ×1
wpf ×1