Xml Windows Phone 7动态列表框模板

Xml Windows Phone 7动态列表框模板,xml,windows-phone-7,Xml,Windows Phone 7,我最近刚刚开始开发一个在列表框中显示大量xml数据的应用程序,但问题是我的问题upload中并不是每个xml项都有一个子值,所以它的列表框代码不应该显示 例如: <item> <id>1</id> <body>Some text</body> <upload></upload> <created>Some text</created> </it

我最近刚刚开始开发一个在列表框中显示大量xml数据的应用程序,但问题是我的问题upload中并不是每个xml项都有一个子值,所以它的列表框代码不应该显示

例如:

<item>
     <id>1</id>
     <body>Some text</body>
     <upload></upload>
     <created>Some text</created>
</item>
我的xaml看起来像:

<ListBox Margin="0,0,-12,0" Name="userDrops">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Margin="0,0,0,17" Width="432">
                            <RichTextBox>
                                <Paragraph>
                                    <Run Text="{Binding Body}" FontSize="25" FontFamily="Segoe WP"></Run>
                                </Paragraph>
                                <Paragraph>
                                    <Hyperlink NavigateUri="{Binding Upload}" TargetName="_blank" FontSize="25" FontFamily="Segoe WP">{Binding Upload}</Hyperlink>
                                </Paragraph>
                                <Paragraph>
                                    <Run Text="{Binding Created}" FontFamily="Segoe WP SemiLight"></Run>
                                </Paragraph>
                            </RichTextBox>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
我想做的是,如果xml upload子级包含一个值,则只显示包含上载信息的段落。否则,只需将其从列表框中删除即可。但我不知道如何更改基本列表框模板

任何帮助都会很好

使用TextBlocks来显示Body和Created怎么样?中间部分是RichTextBox,如果上载为空,则可以使用可见性转换器切换隐藏/显示

您需要首先在xaml页面中包含转换器

xmlns:converters="clr-namespace:xxx.Converters;assembly=xxx"

<converters:VisibilityConverter x:Key="visibilityConverter" />
有关值转换器的更多信息,请参阅

更新

在App.xaml中,执行此操作

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:sg="http://schemas.stargategroup.com.au/2010/xaml/presentation" 
             xmlns:converters="clr-namespace:xxx.Converters"
             x:Class="xxx.Application.App">

    <Application.Resources>
        <ResourceDictionary>
            <converters:VisibilityConverter x:Key="VisibilityConverter" />

你的意思是如果Upload为空,你想隐藏整个StackPanel吗?不,我的意思是如果Upload为空,我想隐藏包含上载值的段落如果Upload为空,它不会显示任何内容,对吗?对,但段落仍然占据高度,因此在正文段落和创建段落之间,有一个空白上传段落的问题,我遇到了使用文本块显示正文的问题是,正文将有超链接在其中。但我如何使用可见性转换器?直到2天前,我才看过silverlight,所以这对我来说是全新的。我刚刚测试了如果我只制作了3个单独的RickTextBox,布局会是什么样子,而且看起来很好。因此,如果有一种方法可以根据绑定动态隐藏RichTextBox,那么它似乎会起作用。请参阅我的更新答案。您可以做的是,创建两个RichTextBox,一个用于显示正文,一个用于显示上载。在upload RichTextBox中,使用可见性转换器检查upload是否为空,如果为空,则将可见性设置为null。我将很快上传一个可见性转换器示例。我不知道这类事情是可能的,谢谢。虽然我得到一个StringToVisibilityConverter无法解决。错误,我的应用程序正在关闭。编辑:哦,这是一门单独的课。别担心那样的话。我现在将研究它。是的,您需要在converter类中添加它,包括它,然后像这样使用它:
                <StackPanel Margin="40,237,8,326" Width="432" Grid.Row="1"> 
                    <RichTextBox> 
                        <Paragraph> 
                            <Run Text="{Binding Body}" FontSize="25" FontFamily="Segoe WP"></Run> 
                        </Paragraph>
                    </RichTextBox> 
                    <RichTextBox Visibility="{Binding Upload, Converter={StaticResource VisibilityConverter}}">
                        <Paragraph> 
                            <Hyperlink NavigateUri="{Binding Upload}" TargetName="_blank" FontSize="25" FontFamily="Segoe WP">{Binding Upload}</Hyperlink> 
                        </Paragraph>
                    </RichTextBox> 
                        <TextBlock Text="{Binding Created}" FontFamily="Segoe WP SemiLight"/>
                </StackPanel>
  public class VisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool visible = true;

            if (value is bool)
            {
                visible = (bool)value;
            }
            else if (value is int || value is short || value is long)
            {
                visible = 0 != (int)value;
            }
            else if (value is float || value is double)
            {
                visible = 0.0 != (double)value;
            }
            else if (value is string) {
                visible = ((string)value).Length > 0;
            }
            else if (value == null) {
                visible = false;
            }

            if ((string)parameter == "!")
            {
                visible = !visible;
            }

            return visible ? Visibility.Visible : Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:sg="http://schemas.stargategroup.com.au/2010/xaml/presentation" 
             xmlns:converters="clr-namespace:xxx.Converters"
             x:Class="xxx.Application.App">

    <Application.Resources>
        <ResourceDictionary>
            <converters:VisibilityConverter x:Key="VisibilityConverter" />