WPF アプリケーションでカスタム コントロールを使用しています。このカスタム コントロールには、ロジックとリソース ディクショナリが含まれています。私のアプリケーションには、ログイン ウィンドウとメイン ウィンドウがあります。アプリケーションが最初にログイン ウィンドウをロードする
<Application x:Class="Dest.App"
....
StartupUri="Login.xaml">
</Application>
メイン ウィンドウで使用するカスタム コントロール
<time:Calendar CloseAppointment="OnDeleteAppointment" AddAppointment="OnAddAppointment" Appointments="{Binding Path=Model}" />
また、MainWindow では、アセンブリからリソース ディクショナリをロードします
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WpfCalendar;component/Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Visual Studio は例外なくカスタム コントロールを読み込みます。しかし、アプリケーションをロードしてログインに成功すると、ログインビューのビューモデルがメインウィンドウを呼び出します
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
メインウィンドウのコンストラクター
public MainWindow()
{
InitializeComponent();
m_MainViewModel = new MainViewModel();
this.DataContext = m_MainViewModel;
}
私は例外を受け取ります
例外の詳細
D:\development\Dental Soft\LotusScheduler\WpfScheduler\WpfCalendar\Logic\Calendar.cs:line 122 の WpfCalendar.Logic.Calendar.FilterAppointments() で、D:\development の WpfCalendar.Logic.Calendar.OnAppointmentsChanged(DependencyPropertyChangedEventArgs e) で\Dental Soft\LotusScheduler\WpfScheduler\WpfCalendar\Logic\Calendar.cs: D:\development\Dental Soft\LotusScheduler\WpfScheduler\WpfCalendar\Logic\ の WpfCalendar.Logic.Calendar.OnAppointmentsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) の 109 行目Calendar.cs: System.Windows.DependencyObject の System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) の 100 行目 System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) の System.Windows.DependencyObject.System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex、DependencyProperty dp、PropertyMetadata メタデータ、EffectiveValueEntry oldEntry、EffectiveValueEntry& newEntry、Boolean coerceWithDeferredReference、Boolean coerceWithCurrentValue、OperationType operationType) での NotifyPropertyChange (DependencyPropertyChangedEventArgs args) System.Windows.DependencyObject.InvalidateProperty (DependencyProperty dp、 Boolean preserveCurrentValue) で System.Windows.Data.BindingExpressionBase.Invalidate(Boolean isASubPropertyChange) で System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange) で System.Windows.Data.BindingExpression.Activate(Object item) で System. .Windows.Data.BindingExpression.AttachToContext (AttachAttempt 試行) System.Windows.Data で。BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance) at MS.Internal.Data.DataBindEngine.Task.Run(Boolean lastChance) at MS.Internal.Data.DataBindEngine.Run(Object arg) at MS.Internal. Data.DataBindEngine.OnLayoutUpdated (オブジェクト センダー、EventArgs e) System.Windows.ContextLayoutManager.fireLayoutUpdateEvent() で System.Windows.ContextLayoutManager.UpdateLayout() で System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg) で System.Windows.Media .MediaContext.InvokeOnRenderCallback.DoWork() で System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() で System.Windows.Media.MediaContext.RenderMessageHandlerCore (Object resizedCompositionTarget) で System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) で System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) で.Windows.Media.System.Windows.Interop.HwndTarget.OnResize() の MediaContext.Resize(ICompositionTarget resizedCompositionTarget) MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o ) 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。MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) の LegacyInvokeImpl(DispatcherPriority 優先度、TimeSpan タイムアウト、デリゲート メソッド、オブジェクト引数、Int32 numArgs) MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, MS.Win32.HwndSubclass.DefWndProcWrapper(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) の MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg) 、IntPtr wParam、IntPtr lParam) MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd、Int32 msg、IntPtr wParam、IntPtr lParam) MS.Win32.UnsafeNativeMethods.SetWindowPos(HandleRef hWnd、HandleRef hWndInsertAfter、Int32 x、Int32 y、Int32 cx、Int32 cy、Int32 フラグ) System.Windows.Window.SetupInitialState (Double requestedTop、Double requestedLeft、Double requestedWidth、Double requestedHeight) で System.Windows.Window.CreateSourceWindow(Boolean duringShow) で System.Windows.Window.CreateSourceWindowDuringShow() で System.Windows.Window.SafeCreateWindowDuringShow() で System.Windows.Window.ShowHelper( System.Windows.Window.Show() at ViewModel.LoginingViewModel.Login(Object parameter) D:\development\Dental Soft\Lotus\AMS\Dentist\ViewModel\LoginingViewModel.cs:line 162 at ViewModel.LoginingViewModel D:\development\Dental Soft\Lotus\AMS\Dentist\ViewModel\LoginingViewModel.cs:D:\development\Dental Soft\Lotus\ の ViewModel.CommonCommand.Execute(Object parameter) の 115 行目の .b__0(Object param) AMS\Dentist\Commands\CommonCommand.cs: MS.Internal.Commands.CommandHelpers の 59 行目。CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated) System.Windows.Controls.Primitives.ButtonBase.OnClick() で System.Windows.Controls.Button.OnClick() で System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) System.Windows.UIElement.OnMouseLeftButtonUpThunk (オブジェクト送信者、MouseButtonEventArgs e) で System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler (デリゲート genericHandler、オブジェクト genericTarget) で System.Windows.RoutedEventArgs.InvokeHandler (デリゲート ハンドラー、オブジェクト ターゲット) で System. System.Windows.UIElement の System.Windows.EventRoute.InvokeHandlersImpl (オブジェクト ソース、RoutedEventArgs args、Boolean reRaised) の Windows.RoutedEventHandlerInfo.InvokeHandler (オブジェクト ターゲット、RoutedEventArgs routedEventArgs)。System.Windows.UIElement.OnMouseUpThunk (オブジェクト送信者、MouseButtonEventArgs e) の ReRaiseEventAs (DependencyObject 送信者、RoutedEventArgs args、RoutedEvent newEvent) System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler (デリゲート genericHandler、オブジェクト genericTarget) で System.Windows.RoutedEventArgs。 System.Windows.RoutedEventHandlerInfo.InvokeHandler(オブジェクト ターゲット、RoutedEventArgs routedEventArgs) の InvokeHandler (デリゲート ハンドラー、オブジェクト ターゲット) System.Windows.EventRoute.InvokeHandlersImpl (オブジェクト ソース、RoutedEventArgs args、Boolean reRaised) で System.Windows.UIElement.RaiseEventImpl( System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args) の DependencyObject 送信者、RoutedEventArgs args) System.Windows.UIElement.RaiseEvent(RoutedEventArgs args、Boolean trusted) の System.Windows.Input。System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd、InputMode モード、 Int32 タイムスタンプ、RawMouseActions アクション、Int32 x、Int32 y、Int32 wheel) の System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean&handled) at System.Windows.Interop.HwndSource. MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&handled) at MS.Win32.HwndSubclass.DispatcherCallback(オブジェクト o) System.Windows.Threading で。MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (オブジェクト ソース、デリゲート メソッド、オブジェクト引数、Int32 numArgs、デリゲート catchHandler) での ExceptionWrapper.InternalRealCall (デリゲート コールバック、オブジェクト引数、Int32 numArgs) System.Windows.Threading.Dispatcher.LegacyInvokeImpl( DispatcherPriority 優先度、TimeSpan タイムアウト、デリゲート メソッド、オブジェクト引数、Int32 numArgs) (MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd、Int32 msg、IntPtr wParam、IntPtr lParam) で)、MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) (システムで) .Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame フレーム) で System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame フレーム) で System.Windows.Threading.Dispatcher.Run() で System.Windows.Application.RunDispatcher(オブジェクトは無視) System.Windows.Application で。D:\development\Dental Soft\Lotus\AMS\Dentist\ の Dentist.App.Main() で System.Windows.Application.Run() で System.Windows.Application.Run(ウィンドウ ウィンドウ) で RunInternal(ウィンドウ ウィンドウ) Microsoft. VisualStudio.HostingProcess.HostProc.RunUsersAssembly() System.Threading.ThreadHelper.ThreadStart_Context(オブジェクト状態) System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態、Boolean preserveSyncCtx) で System.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態、ブール値の preserveSyncCtx)System.Threading.ThreadHelper.ThreadStart() での Threading.ExecutionContext.Run (ExecutionContext 実行コンテキスト、ContextCallback コールバック、オブジェクト状態)
問題管理機能を備えたリソース ディクショナリの一部
<Border BorderBrush="#A5BFE1" BorderThickness="0,1,1,1" Background="White" Grid.Column="1" Grid.Row="0" >
<TextBlock x:Name="DayHeader" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock.ToolTip>
<ToolTip>
<StackPanel>
<TextBlock FontWeight="Bold" Text="{x:Static Properties:Resources.CalendarSelectedDayTitle}" />
<TextBlock Text="{x:Static Properties:Resources.CalendarSelectedDayDescription}" />
</StackPanel>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</Border>
<time:Scroll x:Name="scrollViewer" CustomVerticalOffset="640.0" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<time:TimeRibbon Grid.Column="0"></time:TimeRibbon>
<time:SchedulerDay Grid.Column="1" x:Name="Day"></time:SchedulerDay>
</Grid>
</time:Scroll>
(例外をスローする) Calendar コントロールのコンストラクター
public Calendar()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Calendar), new FrameworkPropertyMetadata(typeof(Calendar)));
CommandManager.RegisterClassCommandBinding(typeof(Calendar),
new CommandBinding(NextDay, new ExecutedRoutedEventHandler(OnExecutedNextDay),
new CanExecuteRoutedEventHandler(OnCanExecuteNextDay)));
CommandManager.RegisterClassCommandBinding(typeof(Calendar),
new CommandBinding(PreviousDay, new ExecutedRoutedEventHandler(OnExecutedPreviousDay),
new CanExecuteRoutedEventHandler(OnCanExecutePreviousDay)));
}
しかし、app.xaml で最初のウィンドウ MainWindow を設定すると、LoginWindow ではなく、すべてが正常に動作し、例外はありません。
問題の原因を教えてください。
ありがとうございました