프로그래밍/WPF

[WPF] Return StaticResource as IValueConverter

흔한티벳여우 2022. 12. 2. 09:06
반응형

XAML 작업을 해보다 보면 특정 값에 따라 StaticResource가 변화시켜야하는 상황들이 있다.

 나의 경우에서는 Icon을 DrawingImage로 만들어서 StaticResource로 참조하여 사용하고 있었는데 타입별로 이 Icon이 바뀌어야했다. 

 Type 별로 Image를 선언하고 Visible을 제어하기보단 Source의 내용을 StaticSource의 값을 변화시키는게 더욱 효율적일 것이다.

 

<DrawingImage x:Key="IconPerson">
<!--Icon 내용-->
</DrawingImage>

<DrawingImage x:Key="IconCar">
<!--Icon 내용-->
</DrawingImage>

위와 같이 Image Source에 넣기 위한 IconPerson과 IconCar라는 DrawingImage StaticSource가 있다.

 

public class IconConverter : IValueConverter
{
    public DrawingImage Person { get; set; }
    public DrawingImage Car { get; set; }

    public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ProjectType type = (IconType)value;
        switch (type)
        {
            case IconType.Person: return Person;
            case IconType.Car: return Car;
            default: return null;
        }
    }
}

위와 같이 StaticSource로 받을 Property인 Person과 Car를 받아서 IconType별로 해당 Property를 반환해주는 Converter를 만들어주자.

 

이것을 실제로 사용하라면 아래와 같다.

<UserControl.Resources>
    <Converter:IconConverter x:Key="IconConverter" 
                             Car="{StaticResource IconCar}"
                             Person="{StaticResource IconPerson}"/>
</UserControl.Resources>

<Grid>
    <Image Source="{Binding Path=IconType, Converter={StaticResource IconConverter}}"/>
</Grid>

 

반응형