문제

나는 부울에 이미지를 묶고 싶고 부울 값에 의존 할 이미지의 소스가 있습니다.

즉 true source = "image1"false source = "image2"

컨버터가 필요하지 않고 인라인으로 할 수있는 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책

DataTrigger를 사용하여 바인딩에 따라 이미지 소스를 교환하는 이미지에서 스타일을 만들 수 있습니다. 이 예에서는 이미지가 단순히 "value"라는 부울의 값에 따라 변경됩니다.

    <Image Width="16">
        <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Value}" Value="False">
                        <Setter Property="Source" Value="Resources/image1.png"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Value}" Value="True">
                        <Setter Property="Source" Value="Resources/image2.png"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>

다른 팁

누구나 바인딩을위한 값 변환기를 찾고 있다면. 여기 내가 사용한 것이 있습니다

<Image Source="{Binding Converter={StaticResource ImageConverter},ConverterParameter=\{Status\}}" />

public class StatusToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string statusValue = parameter.ToString().ToUpper();

        if (!string.IsNullOrEmpty(statusValue))
        {
            string result = string.Empty;

            switch (statusValue)
            {
                case "IDLE":
                    result = "idle.png";
                    break;
                case "OFFLINE":
                    result = "offline.png";
                    break;
                default:
                    result = "online.png";
                    break;
            }

            var uri = new Uri("pack://application:,,,/PIE;component/Images/" + result);

            return uri;
        }

        return string.Empty;
    }

    // No need to implement converting back on a one-way binding
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

제한된 열거

public enum DevStatus 
{ 
   Idle = 1,
   Offline = 2, 
   Active = 3, 
}

ViewModel 및 Converter에서 열거를 설정하면 적절한 이미지가 바인딩됩니다.

<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" />

당신이 그냥 묶는 경우 Image::Source 이것을 달성하는 유일한 방법이면 직접 재산은 사용자 정의입니다. IValueConverter.

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