我在目前的项目中有点困惑。
我使用了一个糟糕的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是相对坐标而不是绝对坐标会错误吗?
答案 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()
所以现在只有当控件可见时才调用该函数,这解决了我的所有问题。