سؤال

أريد أن أحصل على صورة مرتبطة بأنها منطقية ولدي مصدر الصورة لتعتمد على القيمة المنطقية

أي مصدر صحيح = "Image1" False Source = "Image2"

كنت أتساءل عما إذا كانت هناك طريقة للقيام بذلك مضمنة دون الحاجة إلى محول.

هل كانت مفيدة؟

المحلول

يمكنك إنشاء نمط على الصورة التي تستخدم DataTrigger لتغيير مصدر الصورة اعتمادا على ملزمة. في هذا المثال، تتغير الصورة اعتمادا على قيمة منطقية تسمى ببساطة "القيمة".

    <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, 
}

Set Enum من ViewModel والمحول سوف يربط الصورة المناسبة.

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

إذا كنت فقط ملزمة Image::Source الممتلكات مباشرة ثم الطريقة الوحيدة لإنجاز هذا مع مخصص IValueConverter.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top