我在使用Silverlight Toolkit控件时在Expression Blend中打开我的UserControl时遇到一个奇怪的问题.我的UserControl使用工具包的ListBoxDragDropTarget,如下所示:
<controlsToolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<ListBox ItemsSource="{Binding MyItemControls}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<controlsToolkit:WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</controlsToolkit:ListBoxDragDropTarget>
Run Code Online (Sandbox Code Playgroud)
一切都在运行时按预期工作,在Visual Studio 2008中看起来很好.但是,当我尝试在Blend中打开我的UserControl时,我得到XamlParseException:[Line:0 Position:0],我在设计视图中看不到任何内容.更具体地说,Blend抱怨:
由于System.Windows.Controls.ListBoxDragDropTarget:TargetType不匹配的问题,无法显示元素"ListBoxDragDropTarget".
我的silverlight应用程序引用了2009年11月工具包版本中的System.Windows.Controls.Toolkit,我确保为ListBoxDragDropTarget包含这些命名空间声明:
xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
xmlns:mswindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit"
Run Code Online (Sandbox Code Playgroud)
如果我注释掉ListBoxDragDropTarget控件包装器并且只是离开ListBox,我可以在设计视图中看到一切没有错误.此外,我意识到这种情况正在发生在各种Silverlight Toolkit控件上,因为如果我注释掉ListBoxDragDropTarget并将其替换为
<controlsToolkit:BusyIndicator />
Run Code Online (Sandbox Code Playgroud)
Blend中出现相同的确切错误.甚至更奇怪的是,如果我在混合中启动一个全新的silverlight应用程序,我可以添加这些工具包元素而不会出现任何错误,因此我的项目引用工具包程序集似乎发生了一些愚蠢的事情.
我很确定这与从generic.xaml加载工具包控件的默认样式有关,因为错误与TargetType有关,Blend可能正在尝试加载默认样式.
有没有人遇到过这个问题,或者有什么想法可能是我的问题?
silverlight xaml silverlight-toolkit xamlparseexception expression-blend
我有一个典型的Silverlight应用程序与WCF服务,我使用slsvcutil.exe生成标准客户端代理与Web服务进行通信.我正在尝试编写单元测试,我正在尝试使用Silverlight单元测试框架和Moq来模拟代理并删除服务依赖项以进行测试.
我是Moq的新手,在模拟异步调用进行服务调用时,自动在模拟代理上自动引发各种已完成事件有很多麻烦.
为了使代理"可模拟",我为生成的代理调用及其完成的事件创建了自己的简单接口:
public interface IServiceProxy
{
void TestAsync(TestRequest request);
void TestAsync(TestRequest request, object userState);
event EventHandler<TestCompletedEventArgs> TestCompleted;
}
Run Code Online (Sandbox Code Playgroud)
我还将生成的代理对象子类化为实现该接口:
public class MyServiceProxy : GeneratedServiceClient, IServiceProxy, ICommunicationObject
{
// ... overloaded proxy constructors
}
Run Code Online (Sandbox Code Playgroud)
在查看Moq文档之后,我正在尝试设置模拟以期望TestAsync()调用并立即使用EventArgs中的结果引发TestCompleted事件:
[TestMethod]
public void Test_Returns_Expected()
{
var mockProxy = new Mock<IServiceProxy>();
var result = new TestResponse() { Value = true };
this.mockProxy.Setup(
p => p.TestAsync(It.IsAny<TestRequest>()))
.Raises(p => p.TestCompleted += null, new TestCompletedEventArgs(new object[] { result }, null, false, null));
// rest of …
Run Code Online (Sandbox Code Playgroud) 我有一个silverlight类库(不是顶级应用程序),它有几个用户控件,由不同的silverlight应用程序共享.我已经完成并为控件提取了几个样式和画笔,并将它们放在一个单独的XAML文件中作为资源字典,我将其作为合并资源字典引入每个控件.现在,这在我的顶级应用程序中运行良好,只要我将该资源字典保留为"资源"构建操作并从控件中以这种方式引用它.
我真正想做的是将此资源字典XAML文件作为"内容"构建操作,将其复制到顶级XAP中,以便可以在XAP文件中交换XAML而无需重建项目.每当我尝试设置它时,XAML文件将被复制到类库项目的输出bin中,但它永远不会被复制到我的顶级silverlight应用程序项目输出目录或最终的XAP文件中.
完成此任务的最佳方法是什么?XAML资源字典本质上是类库的依赖项,而类库(用户控件)是顶级silverlight应用程序的依赖项.
我试图阻止在Mobile Safari中包含HTML5视频元素的Web应用程序中的默认滚动.处理document.ontouchmove
和呼叫e.preventDefault()
一直是我发现实现这一目标的标准方式.
这似乎无处不在,除非你触摸视频元素的顶部,你可以开始拉动页面,好像它将滚动.这似乎只在强制启用本机视频控件时发生.如果您不包含控件属性并以可以在线播放的方式加载视频(例如在iPad上或在设置了allowInlineMediaPlayback的UIWebView中),则会正确阻止滚动.所以它似乎与捕获事件的原生视频控件(大播放按钮)有关.
这是我正在做的一个人为的例子:
<!DOCTYPE HTML>
<html>
<head>
<title>HTML5 Video Example</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
</head>
<body style="background: blue;">
<video src="http://cdn.kaltura.org/apis/html5lib/kplayer-examples/media/bbb_trailer_iphone.m4v" controls></video>
<script>
window.onload = function() {
document.ontouchmove = function(e) {
e.preventDefault();
}
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
任何解决方法的想法完全禁止滚动行为,甚至在视频上?我已经尝试过ontouchmove
直接处理视频元素,但它不起作用.
谢谢!
我在silverlight控件上使用了几个Blend行为和触发器.我想知道是否有任何机制可以自动分离或确保在不再使用控件时(即从可视树中删除)为行为或触发器调用OnDetaching().
我的问题是,由于其中一个行为,控件存在托管内存泄漏.该行为在OnAttached()重写中的某个长期对象上订阅一个事件,并且应该在OnDetaching()重写中取消订阅该事件,以便它可以成为垃圾收集的候选者.但是,当我从可视树中删除控件时,OnDetaching()似乎永远不会被调用...我能够实现它的唯一方法是在删除控件之前明确地分离有问题的行为,然后正确地进行垃圾回收.
现在我唯一的解决方案是在代码隐藏中为控件创建一个公共方法,该方法可以通过并分离任何可能导致垃圾收集问题的已知行为.在从面板中删除控件之前,要由客户端代码知道调用它.我真的不喜欢这种方法,所以我正在寻找一些自动的方法,这是我忽略或更好的建议.
public void DetachBehaviors()
{
foreach (var behavior in Interaction.GetBehaviors(this.LayoutRoot))
{
behavior.Detach();
}
//continue detaching all known problematic behaviors on the control....
}
Run Code Online (Sandbox Code Playgroud) silverlight garbage-collection memory-leaks attachedbehaviors expression-blend
我希望实现的是一个简单的图像库,用户可以使用jQTouch(http://jqtouch.com)轻扫图像
<div id="container">
<img src="1.gif">
<img src="2.gif">
<img src="3.gif">
</div>
Run Code Online (Sandbox Code Playgroud)
图像很长,例如每个宽度为200像素.容器本身宽300px,有隐藏溢出.
我希望发生的是当用户滑动厨房容器时,它将图像向左/向右拖动.
到目前为止,我已经设置了容器以接收滑动事件以及它所处的方向,但是说实话,我完全不知道从那里继续前进.
任何建议表示赞赏
我有一个Silverlight应用程序,我嵌入在现有的ASP.NET Web应用程序中.Web应用程序有几个下拉导航菜单,通常会覆盖Silverlight应用程序的一部分.我知道使用"无窗口"模式嵌入应用程序,如果我这样做,HTML菜单显示在silverlight插件之上,一切看起来都很棒.
问题是由于其局限性,我不想在无窗口模式下运行.应用程序需要处理MouseWheel事件,这些事件在无窗口模式下本身不可用.我对在无窗口模式下运行的性能缺点也不满意.如果我将无窗口模式设置为false,则silverlight插件将始终显示在导航菜单的顶部,导航菜单位于其后面.
是否有任何类型的CSS/JavaScript/Z-Index hackery可以强制我的页面上的某些HTML格式在Silverlight应用程序上呈现而不在无窗口模式下运行?我不是很希望,因为我知道这种情况是在无窗口模式下运行的主要原因之一,但我想我会问,看看是否有任何解决方法的想法.
silverlight ×5
c# ×2
javascript ×2
xaml ×2
asp.net ×1
asynchronous ×1
extjs ×1
html5-video ×1
ipad ×1
iphone ×1
jqtouch ×1
memory-leaks ×1
moq ×1
proxy ×1
touch ×1
wcf ×1
windowless ×1
xap ×1