在用户控件中将值插入标签

时间:2014-03-05 18:30:29

标签: c# wpf user-controls labels stackpanel

我目前正在制作一个程序,将用户控件添加到主窗口的堆栈面板中。用户控件如下所示:

<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,但没有显示任何内容。这是我第一次使用绑定,所以我需要一些指南。

0 个答案:

没有答案