如何在stackpanel C#WP8上动态添加不同类型的控件

时间:2013-07-23 00:29:23

标签: c# windows-phone-7 xaml windows-phone-8

我想动态地在我的C#代码的堆栈面板中添加一个Image和一个MediaElement,但我看不到其他元素,所以在我的xaml代码中我有这个:

<ListBox x:Name="lstbxUIElements" Width="auto" Height="auto">
    <ListBox.ItemsPanel>
         <ItemsPanelTemplate>
             <StackPanel Name="stackContainer" DataContext="{Binding}" Orientation="Horizontal"/>
         </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

在我的C#代码中,用户可以拍摄照片或视频,我想在水平面板中水平显示它们,我只能看到一个元素。我的C#代码:

//Constructor
public MainPage()
{
    lstbxUIElements.ItemsSource = multiMediaElements;//(List<Objects> multiMediaElements)
}

public void MethodVideo()
{
    MediaElement a ="some code to retrieve mp4"
    multiMediaElements.add(a);
}

public void MethodImage()
{
    BitmapImage bmp = new BitmapImage();
    bmp.SetSource(e.ChosenPhoto);
    multiMediaElements.add(bmp);
}

有什么建议吗? (与WP8合作)

2 个答案:

答案 0 :(得分:2)

使用正确的控件执行正确的任务。如果要向面板添加控件,则不需要列表框,而是直接使用stackpanel:

<StackPanel Name="UIElements" Orientation="Horizontal"/>

然后使用Children属性添加控件:

public void MethodImage()
{
    BitmapImage bmp = new BitmapImage();
    bmp.SetSource(e.ChosenPhoto);
    UIElements.Children.Add(bmp);
}

答案 1 :(得分:0)

如果需要在列表框中添加控件,则直接添加它,您不需要定义任何项模板,然后执行常规绑定。你可以做如下面的代码所示:

<强> XAML:

<ListBox x:Name="lstbxUIElements" Width="auto" Height="auto" />

<强> C#

BitmapImage bmp = new BitmapImage();
bmp.SetSource(e.ChosenPhoto);
lstbxUIElements.Items.Add(bmp)

对于多个项目,请继续在列表框项目中添加元素,如上所示