MVVM获取控制位置

时间:2015-11-04 22:11:34

标签: wpf canvas mvvm

我在目前的项目中有点困惑。

我使用了一个糟糕的API,需要告知在任何给定时间绘制的地点和时间。此API不公开任何控件,我需要一个控件才能正确放置绘制的对象。

我所做的是我在我的视野中将画布放在我的网格中。此画布占用了我绘制的API元素需要占用的空间。因此,通过获取画布的实际宽度和实际高度,我可以以适当的大小绘制我的API元素。我遇到的问题是API元素的位置。 Canvas始终处于适当的位置,但是当程序首次启动时,Canvas.TranslatePoint(new System.Windows.Point(0,0),App.Current.MainWindow);返回0,0。一旦我操作UI并导致Canvas调整大小,location函数就会返回真实位置,并且我的API元素会在适当的位置绘制。我的问题是为什么初始位置为0?我该如何解决这个问题?我从UserControl_Loaded事件调用初始绘制函数。

由于

P.S。我认为初始0,0是相对坐标而不是绝对坐标会错误吗?

1 个答案:

答案 0 :(得分:0)

我想出了我的问题 - 我的控件不是PresentationSource的一部分。长话短说,你无法获得屏幕上没有显示的控件的位置。我的解决方法是: table tr:first-child th:first-child { border-top-left-radius:10px } table tr:first-child th:last-child { border-top-right-radius:10px } table tr:last-child td:first-child { border-bottom-left-radius:10px } table tr:last-child td:last-child { border-bottom-right-radius:10px }

对我而言,private void WaveformCanvas_Loaded(object sender, RoutedEventArgs e){ if((sender as Canvas).IsVisible) { (this.DataContext as StudioControlViewModel).MoveWaveform(); } }函数会调用MoveWaveform()

所以现在只有当控件可见时才调用该函数,这解决了我的所有问题。