WPF 응용 프로그램에서 페이지에 대한 모달 대화 상자를 어떻게 만드나요?

StackOverflow https://stackoverflow.com/questions/173652

  •  05-07-2019
  •  | 
  •  

문제

다른 컨트롤 호스트 프레임이있는 WPF 창이 있습니다. 그 프레임에는 다른 페이지를 표시합니다. 대화 상자 모달 만 페이지 만 만들 수있는 방법이 있습니까? 대화 상자가 표시되면 페이지의 컨트롤을 클릭 할 수는 없지만 페이지에없는 동일한 창의 컨트롤을 클릭 할 수 있어야합니다.

도움이 되었습니까?

해결책

내가 당신의 메시지를 해석하는 것이 맞다면, 당신은 무엇과 비슷한 일을 원합니다Billy Hollis는 그의 직원 응용 프로그램에서 시연합니다.

나는 최근에 비슷한 컨트롤을 구축했으며 이런 종류의 아이디어는 WPF에서 구현하기가 비교적 간단하다는 것이 밝혀졌습니다. DialogPresenter라는 사용자 정의 컨트롤을 만들었습니다. 사용자 정의 컨트롤을위한 제어 템플릿에서 다음과 비슷한 마크 업을 추가했습니다.

<ControlTemplate TargetType="{x:Type local=DialogPresenter}">
  <Grid>
    <ContentControl>
      <ContentPresenter />
    </ContentControl>
    <!-- The Rectangle is what simulates the modality -->
    <Rectangle x:Name="Overlay" Visibility="Collapsed" Opacity="0.4" Fill="LightGrey" />
    <Grid x:Name="Dialog" Visibility="Collapsed">
      <!-- The template for the dialog goes here (borders and such...) -->
      <ContentPresenter x:Name="PART_DialogView" />
    </Grid>
  </Grid>
  <ControlTemplate.Triggers>
    <!-- Triggers to change the visibility of the PART_DialogView and Overlay -->
  </ControlTemplate.Triggers>
</ControlTemplate>

나는 또한 추가했다 Show(Control view) 'part_dialogview'를 찾는 메소드와 전달 된 것을 Content 재산.

이것은 내가 그것을 사용할 수있게한다 DialogPresenter 다음과 같이 :

<controls:DialogPresenter x:Name="DialogPresenter">
  <!-- Normal parent view content here -->
  <TextBlock>Hello World</TextBlock>
  <Button>Click Me!</Button>
</controls:DialogPresenter>

버튼 이벤트 핸들러 (또는 바인딩 명령)에, 나는 간단히 Show () 메소드를 호출합니다. DialogPresenter.

DialogPresenter 템플릿에 ScaleTransform 마크 업을 쉽게 추가하여 비디오에 표시된 스케일링 효과를 얻을 수 있습니다. 이 솔루션에는 깔끔하고 깔끔한 사용자 정의 제어 코드와 UI 프로그래밍 팀을위한 매우 간단한 인터페이스가 있습니다.

도움이 되었기를 바랍니다!

다른 팁

프로젝트가 있습니다 github 이것은 관습입니다 FrameworkElement 이를 통해 기본 컨텐츠를 통해 모달 컨텐츠를 표시 할 수 있습니다.

컨트롤은 다음과 같이 사용할 수 있습니다.

<c:ModalContentPresenter IsModal="{Binding DialogIsVisible}">
    <TabControl Margin="5">
            <Button Margin="55"
                    Padding="10"
                    Command="{Binding ShowModalContentCommand}">
                This is the primary Content
            </Button>
        </TabItem>
    </TabControl>

    <c:ModalContentPresenter.ModalContent>
        <Button Margin="75"
                Padding="50"
                Command="{Binding HideModalContentCommand}">
            This is the modal content
        </Button>
    </c:ModalContentPresenter.ModalContent>

</c:ModalContentPresenter>

특징:

  • 임의의 콘텐츠를 표시합니다.
  • 모달 컨텐츠가 표시되는 동안 기본 내용을 비활성화하지 않습니다.
  • 모달 컨텐츠가 표시되는 동안 기본 컨텐츠에 대한 마우스 및 키보드 액세스를 비활성화합니다.
  • 전체 애플리케이션이 아니라 커버하는 컨텐츠에 대한 모달 일뿐입니다.
  • MVVM 친화적 인 방식으로 사용할 수 있습니다. IsModal 재산.

중첩 된 메시지 펌프를 사용하여 모달 컨트롤을 생성하는 것이 어떻습니까?

http://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/

당신은 여기서 모달 대화를 찾고 있지 않습니다. "페이지"컨트롤을 비활성화하고 대화 상자를 표시하며 대화 상자가 닫히면 다시 활성화하는 함수가 필요합니다.

그래도 모달 대화의 의도가 무엇인지 이해하는지 확실하지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top