C# 从ScatterViewItem中删除阴影不是';行不通
我总是使用以下代码从ScatterViewItem中移除阴影:C# 从ScatterViewItem中删除阴影不是';行不通,c#,.net,wpf,pixelsense,C#,.net,Wpf,Pixelsense,我总是使用以下代码从ScatterViewItem中移除阴影: ScatterViewItem svi = new ScatterViewItem(); svi.ApplyTemplate(); svi.Background = new SolidColorBrush(Colors.Transparent); svi.ShowsActivationEffects = false; svi.BorderBrush = System.Windows.Media.Brushes.Transp
ScatterViewItem svi = new ScatterViewItem();
svi.ApplyTemplate();
svi.Background = new SolidColorBrush(Colors.Transparent);
svi.ShowsActivationEffects = false;
svi.BorderBrush = System.Windows.Media.Brushes.Transparent;
Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome ssc;
ssc = svi.Template.FindName("shadow", svi) as Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome;
ssc.Visibility = Visibility.Hidden;
但最近这已经不起作用了。我总是遇到这样的例外:
System.NullReferenceException was unhandled
Message=Object reference not set to an instance of an object.
Source=Prototype_Concept_2
StackTrace:
at Prototype_Concept_2.PackageView.expand(Package pck) in C:\Users\Roflcoptr\Documents\Visual Studio 2008\Projects\Prototype_Concept_2\Prototype_Concept_2\PackageView.xaml.cs:line 45
at Prototype_Concept_2.PackageView..ctor(SourceFile focus) in C:\Users\Roflcoptr\Documents\Visual Studio 2008\Projects\Prototype_Concept_2\Prototype_Concept_2\PackageView.xaml.cs:line 31
at Prototype_Concept_2.DetailChooser.ShowPackage_PreviewContactDown(Object sender, ContactEventArgs e) in C:\Users\Roflcoptr\Documents\Visual Studio 2008\Projects\Prototype_Concept_2\Prototype_Concept_2\DetailChooser.xaml.cs:line 213
at Microsoft.Surface.Presentation.ContactEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at Microsoft.Surface.Presentation.InputSurfaceProviderBase.DoProcessInput(Object obj)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, 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)
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, Boolean isSingleParameter)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
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 Prototype_Concept_2.App.Main() in C:\Users\Roflcoptr\Documents\Visual Studio 2008\Projects\Prototype_Concept_2\Prototype_Concept_2\obj\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(Assembly 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)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
这意味着在ssc=svi.Template.FindName(“shadow”,svi)行中显示为Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome代码>
必须有一个null引用,但我不知道为什么。问题是ApplyTemplate
返回false,所以模板没有被应用,这意味着它是null。这解释了NullReferenceException
。您可以做的是附加一个eventhandler,该eventhandler订阅ScatterViewItem
的加载事件,并在处理程序中执行相同的操作。在WPF中,模板始终在加载的事件发生时应用
ScatterViewItem svi = new ScatterViewItem();
svi.Background = new SolidColorBrush(Colors.Transparent);
svi.ShowsActivationEffects = false;
svi.BorderBrush = System.Windows.Media.Brushes.Transparent;
RoutedEventHandler loadedEventHandler = null;
loadedEventHandler = new RoutedEventHandler(delegate
{
svi.Loaded -= loadedEventHandler;
Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome ssc;
ssc = svi.Template.FindName("shadow", svi) as Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome;
ssc.Visibility = Visibility.Hidden;
});
svi.Loaded += loadedEventHandler;
一旦超过时间限制,我将立即奖励奖金。它找不到
Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome
类。但我使用了来自示例项目的ScatterPuzzle的CustomShadowChrome。并将代码复制到方法体中。它正在隐藏整个项目。我做错什么了吗?