docs - wpf reference



디버그와 배포 된 버전 간의 UI 탭 제어 가시성 변경 (1)

이것은 꽤 해킹이지만 다음과 같은 것을 시도 할 수 있습니다 :

Public Sub YourFormName.OnLoad ()
    Dim CorrectFormSize As Intager = YourFormName.Size
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.Size = New Size(CorrectFormSize)
End Sub

이 작업은 사용자가 설명하는 크기 조정 프로세스를 자동화한다는 것을 명심하십시오.

응용 프로그램이 일단로드되면 전체 화면이 될 것이므로 몇 줄을 저장하려면 다음 줄을 건너 뛰고 대신이 작업을 수행하십시오.

Public Sub YourFormName.OnLoad()
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.WindowState = System.Windows.Forms.FormWindowState.Maximized
End Sub

탭 컨트롤을 사용하여 사용자에게 다른보기를 표시하는 WPF Mvvm-Light 응용 프로그램이 있습니다.

문제:

내가 가진 문제는 프로그램이 처음 탭 컨트롤이 비어있는 것을로드 할 때입니다. 그러나 로컬에서 디버깅 할 때이 문제는 절대로 발생하지 않습니다. 이 응용 프로그램은이 문제없이 1 년 넘게 개발되어 갑자기 시작되었습니다. 아래 이미지 참조

해킹 오류 :

사용자가 창 크기를 조정하면 탭 컨트롤의 내용이 새로 고쳐지고 나타나며 응용 프로그램이 열려있는 동안 문제가 다시 발생하지 않습니다. 그러나이 문제는 첫 번째 프로그램로드 및 첫 번째 탭로드 (동시에 발생하는 시간)의 100 %

세부:

다음은 탭 컨트롤에 삽입 된 뷰를 정의하는 방법입니다.

 <DataTemplate DataType="{x:Type FtcViewModel:DashboardNavViewModel}">
   <FtcView:DashboardNav  />
 </DataTemplate>

그리고 여기 내 탭 컨트롤입니다 :

<TabControl  Grid.Column="1" Grid.Row="3" 
                     SelectedItem="{Binding CurrentViewModel}" 
                     ItemsSource="{Binding OpenViewModelCollection}" 
                     Style="{StaticResource TabControlStyle}" 
                     ItemContainerStyle="{StaticResource TabItemStyle}" >
        </TabControl>

다음 주보기 내 모델에서 탭 컨트롤에 컬렉션을 할당하고 기본적으로 대시 보드를 첫 번째 탭으로 설정합니다 (관련된 코드 만 포함 시키려고 시도했는데 viewModel 파일에 더 많은 것이 있습니다).

Public Property OpenViewModelCollection As ObservableCollection(Of ViewModelHelper)
    Get
        Return Me._OpenViewModelCollection
    End Get
    Set(value As ObservableCollection(Of ViewModelHelper))
        If _OpenViewModelCollection Is value Then
            Return
        End If
        _OpenViewModelCollection = value
        RaisePropertyChanged(OpenViewModelCollectionPropertyName)
    End Set
End Property

Public Property CurrentViewModel As ViewModelHelper
            Get
                Return Me._CurrentViewModel
            End Get
            Set(value As ViewModelHelper)
                If _CurrentViewModel Is value Then
                    Return
                End If
                ''if change of viewmodel is not from OpenTabViewModelCommandExecute method
                If FlagOpening = False AndAlso value IsNot Nothing Then

                    If _CurrentViewModel IsNot Nothing Then
                        _CurrentViewModel.HandleNavigation(True)
                    End If

                    ''Mark NavService target VM
                    _NavService.TargetViewModelKey = value.vmKey

                    ''evaluate if naviagtion has been canceled
                    If _NavService.bCanNavigate = False Then
                        _NavService.bCanNavigate = True
                        Exit Property
                    End If
                End If
                ''if navigation not canceled, finish assigning new view model
                _CurrentViewModel = value
                RaisePropertyChanged(CurrentViewModelPropertyName)
                If _CurrentViewModel IsNot Nothing Then
                    _CurrentViewModel.RefreshModel()
                End If
            End Set
        End Property
...

'' THIS CODE IS FROM THE CONSTRUCTOR OF THE VIEW MODEL CLASS
OpenViewModelCollection.Add(_Locator.DashboardHome_VM)
CurrentViewModel = OpenViewModelCollection(0)

문제

누군가가 왜 이런 일이 발생하는지 파악하거나 첫 번째 애플리케이션이로드 된 후 UI를 새로 고치는 방법을 제안 할 수 있습니까?

미리 감사드립니다.

2017 년 10 월 4 일 갱신 1

내 개발 컴퓨터에서이 문제를 재현 할 수있었습니다. UI가 비어 있으면 XAML 진단 도구 가 표시되지 않는 것을 볼 수 있습니다. 아래 이미지는 디버깅중인 동일한 앱을 보여 주지만 XAML 도구 상자가없는 것은 Ui 요소가 누락 된 것입니다.

사용자 정의 탭 컨트롤 스타일 내에서 다음 내용이 렌더링되지 않습니다.

<ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" >
    <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>

2 월 11 일 2017 수정

ViewModel의 xaml과 코드 모두에 중단 점을 설정했습니다. ViewModel 데이터가 올바르게 초기화되고 관찰 가능한 객체에 할당되었는지 확인할 수 있습니다. 또한 tabItemTemplate에 "test"텍스트 블록을 삽입하여 어떤 부분이 표시되지 않는지 확인했습니다. 지금은 응용 프로그램 시작시 코드에서 창의 크기를 조정하는 끔찍한 해킹이 있습니다. 그러나 작동하는 동안, 나는 여전히 무슨 일이 일어나고 있는지 알고 싶습니다.





mvvm-light