반응형
화면을 제작하다보면 선택형 Control (이 포스트의 예로는 ComboBox)에 따라 내가 원하는 컨트롤들을 보여주기를 원할 때가 많다. Converter를 배운 사람이라면 먼저 Visible을 이용하여 컨트롤을 먼저 떠오를텐데 이것을 이용하는 것보다 좀더 손쉽고 간단한 방법이 있다.
이것은 Template를 동적으로 변경해주는 것인데 아래와 같은 방식으로 손쉽게 처리할 수 있다.
<ComboBox Height="30"
x:Name="filterComboBox"
SelectedIndex="0"
VerticalContentAlignment="Center">
<ComboBoxItem Content="Type 1"/>
<ComboBoxItem Content="Type 2"/>
<ComboBoxItem Content="Type 3"/>
</ComboBox>
<ContentControl Grid.Column="1">
<ContentControl.Resources>
<!--Switching할 Template 들을 선언해준다.-->
<ControlTemplate x:Key="Type1Template"
TargetType="{x:Type ContentControl}">
<ComboBox SelectedIndex="0">
<ComboBoxItem Content="Test Combo 1"/>
<ComboBoxItem Content="Test Combo 2"/>
<ComboBoxItem Content="Test Combo 3"/>
<ComboBoxItem Content="Test Combo 4"/>
</ComboBox>
</ControlTemplate>
<ControlTemplate x:Key="Type2Template"
TargetType="{x:Type ContentControl}">
<TextBox />
</ControlTemplate>
<ControlTemplate x:Key="Type3Template"
TargetType="{x:Type ContentControl}">
<DataGrid/>
</ControlTemplate>
</ContentControl.Resources>
<ContentControl.Style>
<!--DataTrigger를 이용하여 filterComboBox에서 선택한 값에 따라 Template를 동적으로 변경 시켜준다.-->
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=filterComboBox, Path=SelectedIndex}" Value="0">
<Setter Property="Template" Value="{DynamicResource DataTypeTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=filterComboBox, Path=SelectedIndex}" Value="1">
<Setter Property="Template" Value="{DynamicResource FileTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=filterComboBox, Path=SelectedIndex}" Value="2">
<Setter Property="Template" Value="{DynamicResource LabeledTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
반응형
'프로그래밍 > WPF' 카테고리의 다른 글
[WPF] DataGrid Row Num Column 추가하기 (0) | 2022.10.13 |
---|---|
[WPF] OpenFileDialog 폴더 선택하기 (0) | 2022.10.13 |
[WPF] 오류 해결: 리소스를 찾을 수 없습니다. 리소스 이름은 대/소문자를 구분합니다. (0) | 2022.09.23 |
[WPF] TabControl Header에 Close Button 구현 MVVM 패턴 (1) | 2022.09.21 |
[WPF] ListView & ItemsControl 홀수/짝수 번째 배경색 변경하기 (1) | 2022.09.20 |