我目前正在制作一个程序,将用户控件添加到主窗口的堆栈面板中。用户控件如下所示:
<Grid Name="grid" >
<wfi:WindowsFormsHost Width="32" HorizontalAlignment="Left" xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" xmlns:winForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
<winForms:PictureBox x:Name="pictureBox" ImageLocation="C:\Users\Thommy\Desktop\TibiaDisplay\TibiaDisplay\Image\goldcoins.gif">
</winForms:PictureBox>
</wfi:WindowsFormsHost>
<Label Content="Label" Name="amountLbl" HorizontalAlignment="Left" Margin="62,3,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.085,0.269"/>
<Label Content="Label" Name="totalLbl" HorizontalAlignment="Left" Margin="105,3,0,0" VerticalAlignment="Top"/>
</Grid>
在主窗口中,我有一个Stack面板,可以像上面那样加载x个用户控件。在pictureBox,amountLbl和totalLbl中设置的值取自名为&#34; itemList&#34;的List。使用这些值存储类对象。在用户控件中创建和设置对象值的循环如下所示:
for (int i = 0; i < itemList.Count; ++i)
{
ItemList itemListUC = new ItemList();
itemStackPanel.Children.Add(itemListUC);
itemListUC.amountLbl.Content = itemList[i].amount;
itemList[i].calculateValue();
itemListUC.totalLbl.Content = itemList[i].totalValue;
itemListUC.pictureBox.ImageLocation = "C:/Users/Thommy/Desktop/TibiaDisplay/TibiaDisplay/Image/" + itemList[i].name + ".gif";
}
我面临的问题是标签中的值仅针对第一个用户控件进行了更新。其他标签不显示任何内容。这已通过在用户控件上使用单击事件进行测试,该事件折叠特定用户控件并将其他用户控件向上移动一步。新的第一个用户控件将具有正确和更新的值。 pictureBoxes似乎工作,因为他们从一开始就显示正确的图片。我错误地使用标签吗?
列表中存储的信息是正确的,并且已经过仔细模拟。
请在下面进行更新并继续修改此项目。
我在主窗口中创建了一个ItemControl,其中包含我想要显示的信息;动画gif,2个标签。由于.gif动画而保留特殊图片框。
<ItemsControl Name="newItem" Height="32" Width="400">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<wfi:WindowsFormsHost Width="32" HorizontalAlignment="Left" xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" xmlns:winForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
<winForms:PictureBox x:Name="pictureBox" ImageLocation="{Binding imgSource}"></winForms:PictureBox>
</wfi:WindowsFormsHost>
<Label Content="{Binding currentAmount}"></Label>
<Label Content="{Binding currentTotal}"></Label>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我在后面的代码中创建了一个列表,用于设置从类中获取的这些值:
public class showItem
{
public int currentAmount {get; set;}
public int currentTotal {get; set;}
public string imgSource { get; set; }
}
我设置的值是在for循环中进行的,就像之前我循环itemList.Count一样,并在屏幕上添加更多itemControl:
for (int i = 0; i < itemList.Count; ++i)
{
showItemList.Add(new showItem() { imgSource = itemList[i].address.ToString(), currentAmount = itemList[i].amount, currentTotal = itemList[i].totalValue});
}
我已经看过监视器,看到值已经设置为showItemList,但没有显示任何内容。这是我第一次使用绑定,所以我需要一些指南。