WPF - ширина и высота должны быть неотрицательными - PullRequest
7 голосов
/ 29 ноября 2010

Я испытываю странное исключение из своего приложения.Он работал хорошо, пока я не обновил свою машину для разработки (ту же ОС + VS2010) и попытался снова отладить программное обеспечение.Это исключение, которое я получаю:

Ширина и высота должны быть неотрицательными.

Трассировка стека здесь:

 at System.Windows.Size..ctor(Double width, Double height)
   at System.Windows.Window.SourceWindowHelper.GetHwndNonClientAreaSizeInMeasureUnits()
   at System.Windows.Window.GetHwndNonClientAreaSizeInMeasureUnits()
   at System.Windows.Window.MeasureOverrideHelper(Size constraint)
   at System.Windows.Window.MeasureOverride(Size availableSize)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.ContextLayoutManager.UpdateLayout()
   at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
   at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
   at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
   at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
   at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()
   at AdvancedConsole2._0.App.Main() in F:\Projects\hitech\AdvancedConsole2.0\trunk\AdvancedConsole2.0\AdvancedConsole2.0\obj\x86\Debug\App.g.cs:line 0
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

Ответы [ 2 ]

7 голосов
/ 29 ноября 2010

Вам нужно проверить свою ширину и рост. Это довольно безопасная ставка, чем один или оба из них отрицательны. Я не скажу, что это точно, но я бы хотел поставить на это много денег: -)

Что бы это ни стоило, эта может быть проблемой с измененным разрешением монитора. Некоторые люди делают упрощенный расчет, вычитая размер вашего окна из размера экрана и деля его на два, чтобы отцентрировать его.

Если окажется, что ваше окно больше, чем ваш экран, вы, вероятно, получите отрицательные значения для позиции или размера.

Не видя код, который вычисляет ширину и высоту, все это, конечно, гипотеза. Я предлагаю опубликовать это и / или временно добавить код для его вывода, чтобы вы могли видеть, что происходит.

2 голосов
/ 21 июня 2016

Я не хочу брать кредит на это, но paxdiablo абсолютно прав, когда он предложил проблему с дисплеем.Если бы я мог прокомментировать его поддержку, я бы сделал, но нужно 50 повторений.

Вот моя проблема:

Я только недавно начал использовать 3 монитора;мой ноутбук и два 22-дюймовых монитора.

Чтобы заставить его работать, мне приходилось перемещать мониторы на странице разрешения экрана до тех пор, пока у меня не будет правильного порядка.При этом я случайно переместил один монитор выше остальных.Visual Studio дает сбой на мониторе, который не выровнен по двум другим параметрам.

* FIX *

  1. Щелкните правой кнопкой мыши на рабочем столе
  2. Выберите разрешение экрана
  3. Убедитесь, что экраны монитора перемещены так, чтобы все они были выровнены сверху.
  4. Применить и нажать OK.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...