c# – WPF Canvas.GetLeft()始终接收NaN值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WPF Canvas.GetLeft()始终接收NaN值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2037字,纯文字阅读大概需要3分钟。
内容图文
我试图在WPF中获得控件的左侧.但我总是收到NaN值而不是双倍值.这是我正在尝试的:
XAML:
<Canvas Canvas.Left="230" Name="cnvSaver">
<Border Focusable="False" BorderBrush="#7FBFA379" BorderThickness="0 1" Width="460" Height="460">
<Canvas Background="#3FFFFFFF" AllowDrop="True" Name="cnvViewerLower" Drop="cnvViewerLower_Drop" Height="460" Width="460">
</Canvas>
</Border>
<Border Focusable="False" Name="borUpper" BorderBrush="#7FBFA379" BorderThickness="1 0">
<Border.RenderTransform>
<TranslateTransform x:Name="borUpperTranslate" X="0"/>
</Border.RenderTransform>
<Border.Triggers>
<EventTrigger RoutedEvent="RadioButton.Checked">
<BeginStoryboard>
<Storyboard Name="stbUpperTranslate" Storyboard.TargetName="borUpperTranslate" Storyboard.TargetProperty="X">
<DoubleAnimation RepeatBehavior="Forever" Name="dbaUpperTranslate" From="230" To="0" Duration="0:0:3" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Border.Triggers>
<Canvas Background="#3FEEDBB3" Drop="cnvViewerUpper_Drop" MouseLeftButtonDown="cnvViewerUpper_MouseLeftButtonDown" MouseMove="cnvViewerUpper_MouseMove" MouseLeftButtonUp="cnvViewerUpper_MouseLeftButtonUp" AllowDrop="True" Width="460" Height="460" Name="cnvViewerUpper"></Canvas>
</Border>
</Canvas>
C#背后的代码:
Point p = e.GetPosition(cnvSaver);
if (x > p.X)
{
// Move to Left
Border br = cnvViewerUpper.Parent as Border;
double left = Canvas.GetLeft(br) - Math.Abs(p.X - x);
if(left > 0){
Canvas.SetLeft(br, left);
}
MessageBox.Show("move to left");
}
else if (x == p.X)
{
MessageBox.Show("standing");
}
else {
// Move to Right
double left = Canvas.GetLeft(borUpper);
if (left > 0)
{
Canvas.SetLeft(borUpper, left);
}
MessageBox.Show("move to right");
}
提前致谢.
解决方法:
你只能为一个元素获取Canvas.GetLeft的值,当你最初显式设置它时,否则它将返回NaN(这是预期的WPF行为).
同样的高度和宽度.
在您的情况下,在您的xaml中,您没有在边框上设置任何Canvas.Left属性,因此当您在代码中访问它时,它将返回NaN.
要获得实际的左坐标,请使用TranslatePoint
p = localItem.TranslatePoint(new Point(0, 0), br);
double currentLeft = p.X;
double currentTop = p.Y;
内容总结
以上是互联网集市为您收集整理的c# – WPF Canvas.GetLeft()始终接收NaN值全部内容,希望文章能够帮你解决c# – WPF Canvas.GetLeft()始终接收NaN值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。