我正在尝试在WebView中调用一个函数.我需要调用的一些目标函数是:
play: function()
{
if (this.value < this.p.max)
{
this.inc();
this.timer = new it_timer({ object: this, method: "play", timeout: 200 });
}
else
this.stop();
},
stop: function()
{
if (this.timer)
this.timer.stop();
this.playing = false;
this.playbutton.style.backgroundPosition = "0 0";
}
Run Code Online (Sandbox Code Playgroud)
我开始打电话
webView.InvokeScript("play", new string[0]);
Run Code Online (Sandbox Code Playgroud)
但这没用,HRESULT:0x80020101.我在这个主题上找到了这个http://support.microsoft.com/kb/247784,但它根本没有帮助我.
然后我尝试在多个站点上做我发现的示例:
webView.InvokeScript("eval", new string[] { "document.documentElement.outerHTML;");
Run Code Online (Sandbox Code Playgroud)
和
webView.InvokeScript("alert", new string[] {"message"});
Run Code Online (Sandbox Code Playgroud)
但是这两个都没有用,给出了相同的HRESULT代码.WebView正常呈现,javascript在页面上正常工作.
我很感激在确定问题/寻找解决方案方面提供帮助.
编辑:似乎"警告",所有在类中声明的方法都不起作用.在早期的.NET版本中似乎有一个InvokeMethod(..),WinRT还有其他选择吗?
这是一个接口,取决于我尝试将我维护的事件聚合器MemBus移植到Windows运行时世界:
public interface ISubscriber
{
IDisposable Subscribe<M>(Action<M> subscription);
#if WINRT
[Windows.Foundation.Metadata.DefaultOverload]
#endif
IDisposable Subscribe(object subscriber);
IObservable<M> Observe<M>();
}
Run Code Online (Sandbox Code Playgroud)
我得到的是编译器错误:
"错误WME1031:'
MemBus.ISubscriber.Subscribe<M>(System.Action<M>)'是一种通用方法.Windows运行时方法不能通用."
我只怀疑为什么会这样,如果有人可以澄清,请做.
我的主要问题是:在将代码移植到Windows运行时时,我们应该如何处理这个问题?
泛型有很多更高级别的功能.实际上,我们在Windows运行时使用泛型类(例如List<T>).RT组件应该如何公开泛型类型,如果不是,它是唯一可用的方法,可以回到编写.NET 1.1代码的方式,即对象输入,对象输出和执行转换?
请考虑以下内容从Windows 8 Metro/WinRT应用程序中提取,这些应用程序已经减少到显示异常所需的最低要求:
public class App : Application
{
public App()
{
UnhandledException += (sender, e) => e.Handled = true;
}
}
public class MainPage : Page
{
private void Button_Click_1(object sender, RoutedEventArgs e)
{
throw new NotSupportedException();
}
private async void Button_Click_2(object sender, RoutedEventArgs e)
{
throw new NotSupportedException();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,给定具有两个按钮及其单击事件处理程序的Metro UI,唯一的区别是第二个事件处理程序被标记为async.
然后单击每个按钮,我希望在两种情况下都能调用UnhandledException处理程序,因为它们(应该)都是通过UI线程和相关的同步上下文输入的.我的理解是,对于async void方法,应该通过初始同步上下文捕获和"重新抛出"(保留原始堆栈跟踪)的任何异常,这也在Async/Await FAQ中明确说明.
但是在这种情况下不调用UnhandledException处理程序async,因此应用程序崩溃了!由于这会挑战我认为非常直观的模型,我需要知道原因!是的,我知道我可以将处理程序的主体包装在一个try { } catch { },但我的问题是为什么不调用逆止器UnhandledException处理程序?
为了进一步强调为什么这没有意义,请考虑以下几乎相同的WPF应用程序摘录,同时使用async/await并以.NET Framework 4.5为目标: …
async-await c#-5.0 microsoft-metro windows-8 windows-runtime
用Web开发技术编写的Metro应用程序和用XAML/C#编写的应用程序有什么区别?Microsoft Metro API是否为Javascript提供了挂钩,它是C#的原生内容?他们应该携手合作,还是开发商选择走哪条路?
如果使用JS(OpenGL硬件功能除外),是否存在某些无法实现的功能?
我想知道的原因是要知道哪些技术是构建大量Metro应用程序所必需的,所以当我到达某一点时,我不会被一堵砖墙挡住,让我知道我使用了错误的技术.
是否有办法从Windows Phone 8中的默认音频/视频文件夹访问音频和视频文件?我已经检查了这个文档但是WP8上没有实现所有方法(例如KnownFolders.MusicLibrary):http://msdn.microsoft.com/en-us/library/windows/apps/hh967755.aspx
我需要访问原始文件数据.如果从C#无法访问来自Windows Phone Runtime或纯C++的数据也可以.
我正在编写一个只能在PC上运行的Metro应用程序(因此没有,或者至少不会担心电池寿命).当用户单击按钮时,我需要它来注册并运行后台任务.它注册很好,但我发现没有办法使它比15分钟的延迟更快运行,这对这个应用程序来说是无用的.任何想法我怎么能让它立即运行?
此外,我在这里发现了一个类似的问题,说它不可能,但有人必须想出办法.
编辑:
我要求这项任务的理由如下:
我的应用程序将在很长一段时间内出现读取和写入文件,时间从几分钟到几个小时不等.在大部分时间内,应用程序不太可能在前台呈现.因为我需要代码能够继续执行,所以最好的方法是创建后台任务,但我找不到在Visual Studio之外手动启动此任务的方法,尽管在Visual Studio中它可以完美地工作.如果有更合适的方法来处理此执行,我愿意使用它.
c#-5.0 windows-8 windows-runtime .net-4.5 windows-store-apps
我使用以下代码显示来自网络服务器的图像:
<Image Source="{Binding Url}" />
Run Code Online (Sandbox Code Playgroud)
图像会自动下载,我假设还有一些基于Url的缓存.
我的问题是,当应用程序处于脱机状态时,可能无法显示缓存的图像.
有没有办法改变缓存行为,以便在没有网络可用时加载图像?有关缓存的文档指针也非常有用.
我想要实现的结果非常简单,列表有2列,宽度相等.在Windows电话7/8这可以很容易地使用来实现ListBox与WrapPanel作为ItemsPanel和设定ItemWidth到240(如屏幕宽度为480).
现在我正在编写一个通用应用程序,但问题是屏幕不能保证宽度为480(看起来甚至不是电话)所以我无法设置ItemWidth我希望它填充宽度的屏幕.使用以下方法,我已经能够达到几乎所需的效果XAML:
<GridView ItemsSource="{Binding Results}" Margin="12">
<GridView.ItemTemplate>
<DataTemplate>
<Grid>
<Image Source="{Binding SampleImage}" />
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid MaximumRowsOrColumns="2" Orientation="Horizontal" HorizontalChildrenAlignment="Stretch" VerticalChildrenAlignment="Stretch">
</WrapGrid>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果:

正如所看到的它成功地给出2列具有相等宽度,但Grid在GridView.ItemTemlate没有填满每列的整个宽度.我已经尝试过设置HorizontalAlignment="Stretch"它Grid和GridView它本身没有任何成功.任何人都知道这样做吗?
我想为我的Windows Phone 8.1(WinRT)定制一个循环选择器,目前我找不到任何解决方案.我想要这样的东西:

在Windows Phone的工具包是WP8.0和WP8.1 Silverlight和它不为WP8.1(WinRT的)应用程序的工作(而且这个问题是WP8.1的Silverlight).
WP8.1 有DatePicker和TimePicker控件.有没有办法自定义他们的数据或某些东西来控制我的问题?
有一个LoopingSelector类,但它似乎尚未实现.
任何解决方案或想法将不胜感激.
我想在我的WP8.1(运行时)应用程序中实现下拉到刷新功能.我试图找到这个WP版本的解决方案,但正如我所看到的,这个功能适用于旧版本的WP.
我有一个ListView,我想使用它.使用ScrollViewer,我可以检测到用户何时到达列表的末尾,但是例如VerticalOffset值不能是负数,因此我无法检测到下拉手势.
任何人都可以知道如何为我的应用程序实现此功能?
c# listview windows-runtime pull-to-refresh windows-phone-8.1
windows-runtime ×10
c# ×6
windows-8 ×3
c#-5.0 ×2
xaml ×2
.net-4.5 ×1
async-await ×1
c++ ×1
file-io ×1
gridview ×1
invokescript ×1
listview ×1
webview ×1
winjs ×1
winrt-xaml ×1