Я не уверен в WPF, но это может помочь. Я использовал решение, описанное в RegisterHotKey (user32) (измененный к моим потребностям, конечно) для приложения Windows Forms C# для присвоения комбинации КЛАВИШИ CTRL в рамках Windows для перевода в рабочее состояние формы C#, и это работало красиво (даже на Windows Vista). Я надеюсь, что это помогает и удачи!
Это связано с тем, что HandleErrorAttribute изменяет ViewData, передаваемый в представление при возникновении ошибки. Он передает экземпляр класса HandleErrorInfo с информацией об исключении, контроллере и действии.
Вы можете заменить этот атрибут на тот, который реализован ниже:
using System;
using System.Web;
using System.Web.Mvc;
public class MyHandleErrorAttribute : HandleErrorAttribute {
public override void OnException(ExceptionContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.ExceptionHandled && filterContext.HttpContext.IsCustomErrorEnabled)
{
Exception innerException = filterContext.Exception;
if ((new HttpException(null, innerException).GetHttpCode() == 500) && this.ExceptionType.IsInstanceOfType(innerException))
{
string controllerName = (string) filterContext.RouteData.Values["controller"];
string actionName = (string) filterContext.RouteData.Values["action"];
// Preserve old ViewData here
var viewData = new ViewDataDictionary<HandleErrorInfo>(filterContext.Controller.ViewData);
// Set the Exception information model here
viewData.Model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
filterContext.Result = new ViewResult { ViewName = this.View, MasterName = this.Master, ViewData = viewData, TempData = filterContext.Controller.TempData };
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
}
}