2009-09-02 3 views
1

WPF Toolkit의 VisualStateManager와 관련된 이상한 간헐적 인 버그가 나타납니다. 툴킷 (2009 년 6 월)을 사용하는 애플리케이션을 개발 중이지만 VisualStateManager는 개발하지 않습니다. 그럼에도 불구하고, 나는 다음과 같은 오류가 점점 오전 :WPF Toolkit : VisualStateGroup 버그?

'TextColor' name cannot be found in the name scope of 'System.Windows.Controls.Grid'. 

없이 말을, 나는 Grid 컨트롤에 텍스트 색상 속성을 변경하는 것을 시도하고 있지 않다.

예외는 내 소스 코드의 특정 행을 가리 키지 않습니다. 대신 VisualStateManager의 한 줄을 가리 킵니다. 아래에 IL 덤프를 복사했습니다. 나는 또한 예외의 전문을 게시했다.

누구든지이 문제를 겪고 있습니까? 당신의 도움을 주셔서 감사합니다. VS 2008

*************************************** 
EXCEPTION TEXT 
*************************************** 
System.InvalidOperationException was unhandled 
    Message="'TextColor' name cannot be found in the name scope of 'System.Windows.Controls.Grid'." 
    Source="PresentationFramework" 
    StackTrace: 
     at System.Windows.Media.Animation.Storyboard.ResolveTargetName(String targetName, INameScope nameScope, DependencyObject element) 
     at System.Windows.Media.Animation.Storyboard.ClockTreeWalkRecursive(Clock currentClock, DependencyObject containingObject, INameScope nameScope, DependencyObject parentObject, String parentObjectName, PropertyPath parentPropertyPath, HandoffBehavior handoffBehavior, HybridDictionary clockMappings, Int64 layer) 
     at System.Windows.Media.Animation.Storyboard.ClockTreeWalkRecursive(Clock currentClock, DependencyObject containingObject, INameScope nameScope, DependencyObject parentObject, String parentObjectName, PropertyPath parentPropertyPath, HandoffBehavior handoffBehavior, HybridDictionary clockMappings, Int64 layer) 
     at System.Windows.Media.Animation.Storyboard.BeginCommon(DependencyObject containingObject, INameScope nameScope, HandoffBehavior handoffBehavior, Boolean isControllable, Int64 layer) 
     at System.Windows.Media.Animation.Storyboard.Begin(FrameworkElement containingObject, HandoffBehavior handoffBehavior, Boolean isControllable) 
     at System.Windows.VisualStateGroup.StartNewThenStopOld(FrameworkElement element, Storyboard[] newStoryboards) in C:\dd\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\VSM\VisualStateManager\System\Windows\VisualStateGroup.cs:line 109 
     at System.Windows.VisualStateManager.GoToStateInternal(Control control, FrameworkElement element, VisualStateGroup group, VisualState state, Boolean useTransitions) in C:\dd\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\VSM\VisualStateManager\System\Windows\VisualStateManager.cs:line 234 
     at System.Windows.VisualStateManager.GoToState(Control control, String stateName, Boolean useTransitions) in C:\dd\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\VSM\VisualStateManager\System\Windows\VisualStateManager.cs:line 67 
     at Microsoft.Windows.Controls.ButtonBaseBehavior.UpdateState(Control control, Boolean useTransitions) in C:\dd\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\VSM\VisualStateManager\Microsoft\Windows\Controls\ButtonBaseBehavior.cs:line 77 
     at Microsoft.Windows.Controls.ControlBehavior.UpdateStateHandler(Object o, EventArgs e) in C:\dd\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\VSM\VisualStateManager\Microsoft\Windows\Controls\ControlBehavior.cs:line 54 
     at MS.Internal.ComponentModel.PropertyChangeTracker.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args) 
     at System.Windows.DependentList.InvalidateDependents(DependencyObject source, DependencyPropertyChangedEventArgs sourceArgs) 
     at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) 
     at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, OperationType operationType) 
     at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, OperationType operationType, Boolean isInternal) 
     at System.Windows.DependencyObject.SetValue(DependencyPropertyKey key, Object value) 
     at System.Windows.DependencyObject.SetValue(DependencyPropertyKey dp, Boolean value) 
     at System.Windows.ReverseInheritProperty.FirePropertyChangeInAncestry(DependencyObject element, Boolean oldValue, DeferredElementTreeState treeState) 
     at System.Windows.ReverseInheritProperty.FirePropertyChangeInAncestry(DependencyObject element, Boolean oldValue, DeferredElementTreeState treeState) 
     at System.Windows.ReverseInheritProperty.FirePropertyChangeInAncestry(DependencyObject element, Boolean oldValue, DeferredElementTreeState treeState) 
     at System.Windows.ReverseInheritProperty.FirePropertyChangeInAncestry(DependencyObject element, Boolean oldValue, DeferredElementTreeState treeState) 
     at System.Windows.ReverseInheritProperty.OnOriginValueChanged(DependencyObject oldOrigin, DependencyObject newOrigin, DeferredElementTreeState& oldTreeState) 
     at System.Windows.Input.MouseDevice.ChangeMouseOver(IInputElement mouseOver, Int32 timestamp) 
     at System.Windows.Input.MouseDevice.PreNotifyInput(Object sender, NotifyInputEventArgs e) 
     at System.Windows.Input.InputManager.ProcessStagingArea() 
     at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input) 
     at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport) 
     at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel) 
     at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
     at System.Windows.Interop.HwndSource.InputFilterMessage(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 ProjectManager.App.Main() in D:\Users\dcveeneman\Documents\Visual Studio 2008\Projects\FsProjectManager\ProjectManager\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: 

는 DISSASSEMBLY


Address: Microsoft.Windows.Controls.ControlBehavior.UpdateStateHandler(object, System.EventArgs) 

Dissassembly: (VS 2008 caret indicates exception thrown at line 70, the NOP) 

    --- C:\dd\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\VSM\VisualStateManager\Microsoft\Windows\Controls\ControlBehavior.cs 
    00000000 push  ebp 
    00000001 mov   ebp,esp 
    00000003 sub   esp,10h 
    00000006 mov   dword ptr [ebp-4],ecx 
    00000009 mov   dword ptr [ebp-8],edx 
    0000000c cmp   dword ptr ds:[0BB401C8h],0 
    00000013 je   0000001A 
    00000015 call  53D8DC91 
    0000001a xor   edx,edx 
    0000001c mov   dword ptr [ebp-0Ch],edx 
    0000001f mov   edx,dword ptr [ebp-8] 
    00000022 mov   ecx,55BDE49Ch 
    00000027 call  53B3F332 
    0000002c mov   dword ptr [ebp-0Ch],eax 
    0000002f cmp   dword ptr [ebp-0Ch],0 
    00000033 jne   00000063 
    00000035 mov   ecx,601D43E0h 
    0000003a call  F1D25114 
    0000003f mov   dword ptr [ebp-10h],eax 
    00000042 mov   edx,0BB40010h 
    00000047 mov   ecx,700001A9h 
    0000004c call  53C84292 
    00000051 mov   edx,eax 
    00000053 mov   ecx,dword ptr [ebp-10h] 
    00000056 call  51E0669C 
    0000005b mov   ecx,dword ptr [ebp-10h] 
    0000005e call  53C843C7 
    00000063 push  1  
    00000065 mov   edx,dword ptr [ebp-0Ch] 
    00000068 mov   ecx,dword ptr [ebp-4] 
    0000006b mov   eax,dword ptr [ecx] 
    0000006d call  dword ptr [eax+48h] 
    00000070 nop    
    00000071 mov   esp,ebp 
    00000073 pop   ebp 
    00000074 ret   4  

답변

1

믿을 수 없습니다. 나는이 질문을 게시 한 직후에 내 대답을 발견했습니다. WPF 툴킷 달력 컨트롤에 대한 컨트롤 템플릿을 만들었습니다 (탐색 버튼이없는 달력이 필요했습니다). 따라서 기존 컨트롤 템플릿의 복사본을 수정했지만 컨트롤 템플릿은 레이아웃 Grid 컨트롤에 (존재하지 않는) TextProperty를 설정하려고 시도합니다. 그리고 원래 컨트롤 템플릿에서 사용하는 VisualStateGroup 내부에서 발생합니다.

이제 제어 템플릿을 수정했을 때 버그를 도입했는지, 아니면 컨트롤 템플릿을 수정하기 전에 버그가 있는지 여부를 파악해야합니다. 어쨌든 수수께끼가 풀렸다!

데이비드 Veeneman
데다가 시스템

관련 문제