는, 그것을위한 ContainerControl
또는 ContentPresenter
를 사용을주고는 바란 디자인 사진입니다.
일반적으로 "가시성 켜기/끄기"는 좋은 방법이 아닙니다. UI가 모든 객체 (보이지 않는 객체도 포함)를 만들고 데이터 및 이벤트 등을 처리하도록합니다.
그리고 수동으로 전환해야합니다.
WPF는이를 저장하는 많은 메커니즘을 제공합니다. 일부는 다른 것보다 더 똑똑합니다.
WPF에서 가장 기본적인 메커니즘 중 하나는 Control
및 그 Template
속성입니다. 당신은 하나의 Control
으로 그리드 + 내용 + SwitchingVisibility 아이디어를 전체 교체하고 전환 할 수는 Template
: 이제
<Window.Resources>
<ControlTemplate x:Key="panel1"> ..carrots.. </ControlTemplate>
<ControlTemplate x:Key="panel2"> ..cucubers.. </ControlTemplate>
<ControlTemplate x:Key="panel3"> ..donkey.. </ControlTemplate>
...
</Window.Resources>
<Grid x:Name="LayoutRoot">
<Control x:Name="foo" />
</Grid>
, 당신은 foo
을 얻을하고 .Template
을 설정하고, panel1
에 다음 "당근"을 설정하면 것이다 나타나다. panel3
으로 설정하면 당나귀. 등등.
매우 강력하지만 필자가 다루지 않을 다른 것들이 있기 때문에 실제로는 유용하지 않을 것입니다. 템플릿을 자세히 설명하는 책과 자습서가 있습니다. 또한이 메커니즘 은 실제로 이러한 작업을 위해 설계되지 않았습니다. 가장 기본적인 것이고, WPF로 작업하고 싶다면 알아두면 좋지만, 여기에 더 적합한 것들이 있습니다.
두 번째로 강력하고 기본적인 기본 메커니즘은 ContentControl/ContentPresenter
입니다. 거의 동일한 방식으로 작동합니다 (실제로 CC는 내부적으로 CP를 사용합니다). 그래서 건너 뛸 것입니다.
은 ContentControl은 당신이 제시 tryng하는 데이터에 대한 올바른 템플릿을 선택하는 방법을 자동으로 알고있는 스마트 컨트롤입니다.
그래서 :
<Window.Resources>
<DataTemplate DataType="CarrotData"> ..carrots.. </..>
<DataTemplate DataType="CucumberData"> ..cucubers.. </..>
<DataTemplate DataType="DonkeyData"> ..donkey.. </..>
...
</Window.Resources>
<Grid x:Name="LayoutRoot">
<ContentControl x:Name="foo" Content="{Binding ..}" />
</Grid>
주 'DataTemplate을'을 '은 ControlTemplate'에서 변경할 수 있습니다.
이제이 설정을 사용하면 템플릿을 수동으로 전환 할 필요가 없습니다. 당신은 단지 "foo는"을 얻을에 하나의 내용을 설정
- CarrotData 객체, 즉, 당근 관련 데이터를 오이 관련 데이터를 포함
- CucumberData 객체를 포함
- DonkeyData 객체, 당나귀 관련 데이터가 포함되어 있음
표시 할 데이터를 설정하면 (예 : foo.Content = carrots[5]
) ContentControl은 표시 할 관련 템플릿을 선택합니다.
당신은Content
속성을 거의 모든 것에 바인딩 할 수 있습니다. 당근/당나귀가 들어있는 데이터 클래스가 있고 속성이 CurrentThing
인 경우 바인딩 할 수 있으며 ContentControll은 CurrentThing에 대한 변경 사항과 함께 자동으로보기를 전환합니다.
기본 사항입니다. 거의 모든 점에서 간단히 다루려고 노력했습니다. 지금은 ControlTemplates를 그대로 두십시오. DataTemplates와 Bindings에 대해 읽어보십시오. ContentPresenter (1 개 항목에 대해 1 개 템플릿 표시) 및 ItemsControl (N 개 항목 + 템플릿 표시)에 대해 읽습니다. 그런 다음 MVVM 패턴을 조금 읽으십시오.
"모든 것이 하나의 그리드에 있음"과 "가시성 전환"이 이상하게 느껴질 것입니다.
그러나 모든 항목에 비용이 포함되어 있다고 언급하지 않으면 나는 공정하지 않을 것입니다. 템플릿과 바인딩을 광범위하게 사용하면 수동으로 모든 작업을 수행 할 때 얻을 수있는 것과 비교하면 앱이 약간 느려집니다. 그러나 일반적으로 수동으로 수행하는 것은 가치가 없습니다.
실제로 무엇을 묻고 있습니까? 무슨 문제 있니? 독 패널을 사용하여 이것을 매우 쉽게 레이아웃 할 수 있지만, 이미 언급했듯이 다른 것을 의미한다고 생각하십니까? – BenjaminPaul
아, 맞아. 내 질문은 : 어떤 종류의 컨테이너를 다른 "보기/페이지"를 보유해야합니까?. 내 말은 - 예를 들어 서로 다른 그리드를 서로 붙일 수 있고 어떤 버튼을 눌렀는지에 따라 각각의 그리드를 보이게하거나 숨길 수 있습니다. – rollekn
@rollekn 프리즘 라이브러리를보고 복합적인 사용자 인터페이스를 만드는 방법 MVVM 방식의 WPF. – Mashton