c# – 如何在Silverlight中以编程方式定位画布?
我正在使用Silverlight 3 / C#,我正在尝试以编程方式创建一些XAML对象以响应用户单击按钮.
但是,我似乎无法定位我创建的Canvas对象 – 当我使用Canvas.LeftProperty值在新Canvas上调用SetValue()时,浏览器窗口将清除为空屏幕. 我有一个简单的函数来展示问题(我开始使用更复杂的东西): private Canvas MakeNewCanvas() { Canvas newCanvas = new Canvas(); newCanvas.Width = newCanvas.Height = 50; newCanvas.SetValue(Canvas.LeftProperty,10); return newCanvas; } 和一个简单的按钮单击处理程序,它调用: private void MyButton_Click(object sender,System.Windows.RoutedEventArgs e) { myPage.Children.Add(MakeNewCanvas()); } 注意:myPage是我的应用程序的MainPage XAML文件中定义的Canvas对象. 我已经在VS调试器中跟踪了这一点,并且在Firefox中执行了SL应用程序,每当它执行SetValue()行时,浏览器变为白色并开始尝试下载数据(根据状态栏).在我将Canvas放入XAML树之后,我尝试调用SetValue(),例如: myPage.Children.Add(newCanvas); newCanvas.SetValue(Canvas.LeftProperty,10); 但它没有区别 – 只要命中SetValue()调用,浏览器就会变白. 除了具有依赖项属性枚举值的SetValue()函数之外,Canvas类似乎没有直接设置Left / Top的方法.还有Canvas.SetLeft()和Canvas.SetTop(),但我想它们只是填充到SetValue()上.无论如何,使用它们并没有帮助. 如果我没有调用SetValue(),那么我的画布会在SL应用程序中出现(和我添加到它的子对象),如您所料,在最左上方. 如果我在Expression Blend中创建并定位Canvas对象,那么生成的XAML在Canvas本身中包含Canvas.Left和Canvas.Top属性值,正如我所料,所以在我看来我在C#中尝试的应该是工作. 但是我似乎无法在C#中设置左/顶值,而浏览器中的SL并不奇怪. 有任何想法吗? 编辑:我的方法是正确的,但画布坐标需要是浮点数,而不是整数 – 请参阅接受的答案了解详情. 解决方法
尝试使用代码,但调试器捕获异常,我得到:
无法在System.Int32类型的对象上设置System.Double类型的DependencyProperty. 这是一个非常愚蠢的问题 – SetValue只接受Object,所以你很容易出现这样的问题. 尝试: newCanvas.SetValue(Canvas.LeftProperty,10.0); 要么 Canvas.SetLeft(newCanvas,10); 它可能会奏效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- cocos2d-lua 触摸事件
- 依赖属性 dependency property WPF,为什么要用DDP?
- ruby-on-rails – RoR:设计和配置文件
- React复选框不发送onChange
- XML(DOM SAX JDOM DOM4J)
- 如何通过c#从asp.net中的excel文件加载gridview?
- 如何让redux actions reducers 按需加载!
- ruby-on-rails – Rails 4 ActionMailer around_action |访
- JSON.stringify(Javascript)和json.dumps(Python)在列表中不
- XML Schema中targetNamespace概念