ربط الصورة. المصدر وفقا لمنطقية دون محول؟
-
13-09-2019 - |
سؤال
أريد أن أحصل على صورة مرتبطة بأنها منطقية ولدي مصدر الصورة لتعتمد على القيمة المنطقية
أي مصدر صحيح = "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
.
لا تنتمي إلى StackOverflow