2012-01-08 3 views
0

그래서 모든 컨트롤이 그리드 및 스택 패널을 사용하여 멋지게 배치되었습니다.WPF에서 대화 상자 뷰를 절대 위치 지정하는 방법 MVVM

경우에 따라 대화 상자 레이어를 표시하고 싶습니다 (환경 설정 등 추가). 모달 일 필요는 없으며 투명한 배경을 가질 필요가 없습니다 .. 난 그냥 멋지고, 눈에 거슬리지 않고, 절대적으로 위치 할 필요가 있습니다 ..

유일한 대화 상자 컨트롤 배치를 생각할 수있는 유일한 방법입니다. 절대적으로, 나는 사용하지 않는 캔버스를 사용하고있다. 정기적으로 레이아웃 된 컨트롤 위에 표시해야합니다.

어떤 옵션이 있습니까?

+0

왜 'Window'를 사용하지 않습니까? –

+0

대화 상자를 다른 창에서 완전히 표시하거나 기존 창 테두리 밖으로 표시 하시겠습니까? –

+0

다른 창을 띄우는 것과 같은가요? 그것은 끔찍할 것이다. –

답변

2

popup control (내용을 배치하려면 PlacementRectangle 값을 설정 함) 또는 이렇게하려면 Adorner 레이어를 사용할 수 있습니다. adorner 기술은 여기에 설명되어 있습니다 : http://bignickolson.com/2009/10/15/overlaying-controls-in-wpf-with-adorners/

+0

+1. 상하/좌우로 위치시킬 수 있습니다. – Sabuncu

+0

이것은 실제로 내가 필요한 것에 가깝습니다. 여기 나는 비 투명한 배경의 문제에 직면하고있다. 내 사용자 컨트롤은 둥근 모서리가있는 테두리입니다. 팝업에 표시하면 모퉁이가 흰색으로 표시됩니다. –

+1

팝업 컨트롤에서 AllowsTransparency = true로 설정합니다. http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives. popup.allowstransparency.aspx –

0

당신이 찾고있는 것은 Panel.ZIndex을 Dialog의 높은 가치로 설정하는 것입니다. 그런 다음 가시성을 설정하여 대화 상자를 숨 깁니다. 그런 다음이 예제에서는 대화 상자이 결합 할 수 있습니다 http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.zindex.aspx

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TextBlock Panel.ZIndex="9999" Background="Green">This TextBlock will always be on top as long as it is visible.</TextBlock> 
     <TextBlock Background="Red">Test</TextBlock> 
    </Grid> 
</Window> 

: WPF C# InputBox

+0

후지 감사하지만 zIndex 어떻게 든 절대 위치 수 있습니다? 귀하의 예제에서 컨트롤은 여전히 ​​그 그리드 내에 있습니다 ..내 경우에는 그리드보다 큰 사용자 컨트롤이 될 것입니다. 왜 절대 위치 지정이 필요한 것입니다. –

+0

네, 맞습니다. 내 솔루션은 그 그리드 내에서 대화 상자를 원할 경우에만 작동하지만 MainWindow 그리드에 유지하는 한 다른 모든 것 위에 배치 할 수 있어야합니다 (Window Borders ofc 내). – eandersson

0

내가 this을 믿는 당신은 다음 adorner에 컨트롤을 배치 할 수 있습니다 .... 당신을 위해 무엇을 찾고 있습니다 bool 속성을 변경하여 표시하거나 숨길 수 있습니다 ... 좋아하는 동작을 사용자 정의 할 수 있습니다.