我正在尝试将Windows应用程序转换为wpf应用程序,一切都很好,但此时我还是Struck将波纹管声明转换为wpf的代码。
这些是Windows声明,
Dim screenwidth As String = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
Dim screenheight As String = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
我用谷歌搜索找到这些声明的等效类属性,我得到了一些东西,但是那些已经存在但是在我尝试使用它们的时候没有工作
“ PointToScreen(新点(0,0))” 他们是:
如果我在我的代码中使用这些:
Dim screenwidth As String = System.Windows.SystemParameters.VirtualScreenWidth Dim screenheight As String = System.Windows.SystemParameters.VirtualScreenHeight “(OR)
Dim screenwidth As String = System.Windows.SystemParameters.PrimaryScreenWidth Dim screenheight As String = System.Windows.SystemParameters.PrimaryScreenHeight
With MyPanel
.PointToScreen(New Point(SystemParameters.VirtualScreenWidth, 0)) ' Getting Exception in this line
.Height = (80 / 1080) * screenheight
.Width = screenwidth
.Background = New SolidColorBrush(Colors.Transparent)
End With
我将异常视为无效操作异常 “视觉效果与PresentationSource无关。”
我已经尝试过这篇文章http://social.msdn.microsoft.com/Forums/en/wpf/thread/f3c982a1-ca16-4821-bf08-f6dd8ff8d829 ,但我想仅使用PointToScreen进行试用。
我该如何解决这个问题???? 请帮帮我
答案 0 :(得分:1)
嗨试试这个以获得屏幕的宽度和高度。
double width=System.Windows.SystemParameters.PrimaryScreenWidth;
double height = System.Windows.SystemParameters.PrimaryScreenHeight;
异常是因为您在呈现之前指向Mypanel。这样做
if (MyPanel.IsVisible)
{
MyPanel
.PointToScreen(New Point(SystemParameters.PrimaryScreenWidth, 0)) ' Getting Exception in this line
.Height = (80 / 1080) * screenheight
.Width = screenwidth
.Background = New SolidColorBrush(Colors.Transparent)
}
我希望这会有所帮助。
答案 1 :(得分:0)
这个怎么样:
Screen.PrimaryScreen.WorkingArea.Height
和
Screen.PrimaryScreen.WorkingArea.Width
如果你想考虑DPI设置,我使用它(_windowToControl是你应用程序中的一个窗口):
public double ScreenPixelHeight
{
get
{
PresentationSource source = PresentationSource.FromVisual(_windowToControl);
if (source != null)
return Screen.PrimaryScreen.WorkingArea.Height * source.CompositionTarget.TransformFromDevice.M11;
else
return 0;
}
}
public double ScreenPixelWidth
{
get
{
PresentationSource source = PresentationSource.FromVisual(_windowToControl);
if (source != null)
return Screen.PrimaryScreen.WorkingArea.Width * source.CompositionTarget.TransformFromDevice.M11;
else
return 0;
}
}