컨버터가없는 부울에 따라 indage.source를 바인딩 하시겠습니까?
-
13-09-2019 - |
문제
나는 부울에 이미지를 묶고 싶고 부울 값에 의존 할 이미지의 소스가 있습니다.
즉 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
.
제휴하지 않습니다 StackOverflow