我正在尝试将图像绑定到ViewModel中的按钮。但我不能绑定按钮。但是,如果我将相同的值绑定到imagebox意味着它显示图像。
<ListBox Tap="listBox1_Tap" Height="444" ItemsSource="{Binding StudentDetails,Mode=TwoWay}" HorizontalAlignment="Left" Margin="2,34,0,0" Name="listBox1" VerticalAlignment="Top" Width="476" BorderBrush="#00410D0D">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Height="50" Source="{Binding addImage}" HorizontalAlignment="Left" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="50" />
<Button Height="80" Width="80" DataContext="{Binding DataContext, ElementName=listBox1}" Command="{Binding addPerson}">
<Button.Background>
<ImageBrush ImageSource="{Binding addImage}" Stretch="Fill" />
</Button.Background>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:1)
我假设您已将图像的构建操作设置为Resource,这是默认值。你的字符串值必须是这样的:
string addImage = "/Application;component/Images/image_name.png";
我以上所有都没问题,那么问题必须在你的Button
中。您已将其DataContext设置为ListBox1
DataContext。为什么?没有必要。
更改
<Button Height="80" Width="80" DataContext="{Binding DataContext, ElementName=listBox1}" Command="{Binding addPerson}">
<Button.Background>
<ImageBrush ImageSource="{Binding addImage}" Stretch="Fill" />
</Button.Background>
</Button>
到
<Button Height="80" Width="80" Command="{Binding addPerson}">
<Button.Background>
<ImageBrush ImageSource="{Binding addImage}" Stretch="Fill" />
</Button.Background>
</Button>
答案 1 :(得分:0)
您应该使用转换器来绑定图像。
以下是我参与的一个示例。它对我来说很好。界面定义:
<DataTemplate x:Name="lstbxCreateEventTypesTiles">
<Button x:Name="btn1" Content="{Binding Name}" CommandParameter="{Binding ID}" Click="Button_Click"
Style="{StaticResource ButtonStyle}" HorizontalContentAlignment="Left" BorderThickness="0" FontSize="42.67" FontFamily="Segoe WP SemiLight" Foreground="White" BorderBrush="{x:Null}">
<Button.Background>
<ImageBrush ImageSource="{Binding MasterTypeID, Converter={StaticResource ImageConverter}}" Stretch="None"/>
</Button.Background>
</Button>
</DataTemplate>
班级来源:
公共类ImageConverter:IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
ImageSource img = null;
try {
if (value != null) {
switch (value.ToString()) {
case "1":
value = "Assets/tile_bg.png";
break;
case "2":
value = "Assets/tile2_bg.png";
break;
default:
break;
}
BitmapImage image = new BitmapImage();
image.SetSource(Application.GetResourceStream(new Uri(@value.ToString(), UriKind.Relative)).Stream);
img = image;
}
} catch (Exception ex) {
}
return img;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}