我需要将对象html, body { margin: 0; height: 100%; }
的数组绑定到WrapPanel。
我在主类构造函数中声明了对象:
Image
我的班级public MainWindow()
{
InitializeComponent();
private Masina[] _masina = new Masina[12];
DataContext = new
{
data1 = _masina
};
}
里面有几个变量,但我想只绑定Masina
:
Image
我试过这个XAML代码:
public class Masina
{
public Image masina_pav = new Image();
public bool r_mas;
public string s_mas;
public Masina()
{
byte[] buffer = File.ReadAllBytes("teksturos/masinos/red/top.png");
MemoryStream memoryStream = new MemoryStream(buffer);
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.DecodePixelWidth = 100;
bitmap.DecodePixelHeight = 200;
bitmap.StreamSource = memoryStream;
bitmap.EndInit();
bitmap.Freeze();
masina_pav.Source = bitmap;
Canvas.SetLeft(masina_pav, 100);
Canvas.SetTop(masina_pav, 200);
}
}
现在程序启动但不显示任何
<WrapPanel Name="zem" Height="1000" Width="1108" > <ItemsControl ItemsSource="{Binding data1}" DisplayMemberPath="masina_pav"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Name="masinu_sarasas" HorizontalAlignment="Center" IsItemsHost="True" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> </WrapPanel >
(应该是12个)。有人能帮我解决一下吗?
答案 0 :(得分:1)
Image
是一个不应在视图模型中使用的视图类。相反,您的类应提供类型为ImageSource
的公共属性。请注意,它是属性,而不是您声明的字段。这是必要的,因为WPF数据绑定仅适用于公共属性。
public class Masina
{
public ImageSource MasinaPav { get; private set; }
...
public Masina()
{
using (var fileStream = new FileStream(
"teksturos/masinos/red/top.png",
FileMode.Open, FileAccess.Read, FileShare.Read))
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.DecodePixelWidth = 100;
bitmap.DecodePixelHeight = 200;
bitmap.StreamSource = fileStream;
bitmap.EndInit();
bitmap.Freeze();
MasinaPav = bitmap;
}
}
}
现在你的ItemsControl将有一个ItemTemplate
,其中一个Image控件绑定到视图模型属性:
<ItemsControl ItemsSource="{Binding data1}">
...
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding MasinaPav}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
除此之外,您应该小心设置BitmapImage DecodePixelWidth
和DecodePixelHeight
,因为它可能会破坏位图的宽高比。