Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 当列表框不包含任何元素时设置默认文本_Silverlight_Windows Phone 7 - Fatal编程技术网

Silverlight 当列表框不包含任何元素时设置默认文本

Silverlight 当列表框不包含任何元素时设置默认文本,silverlight,windows-phone-7,Silverlight,Windows Phone 7,当列表框不包含任何元素时,是否可以使用某种形式的默认文本 e、 g.当列表中没有项目时,我希望显示以下文本:请添加一些项目您通常需要自己处理-用您的邮件覆盖列表框,并在没有要显示的项目时使邮件可见。您可以将消息UI的可见性绑定到与列表框的ItemsSource相同的源,并使用转换器返回可见性。ItemsSource为null时可见。我认为实际集合为null时,这不起作用,因此,您可以随意处理集合项计数的更改(代码隐藏/视图模型)并调整覆盖的可见性或实现可重用的附加属性/行为/控件。我为列表框提供

当列表框不包含任何元素时,是否可以使用某种形式的默认文本


e、 g.当列表中没有项目时,我希望显示以下文本:
请添加一些项目

您通常需要自己处理-用您的邮件覆盖列表框,并在没有要显示的项目时使邮件可见。您可以将消息UI的可见性绑定到与列表框的ItemsSource相同的源,并使用转换器返回可见性。ItemsSource为null时可见。我认为实际集合为null时,这不起作用,因此,您可以随意处理集合项计数的更改(代码隐藏/视图模型)并调整覆盖的可见性或实现可重用的附加属性/行为/控件。

我为列表框提供了一个简单的解决方案,在99%的情况下都适用。一旦设置为资源,您所要做的就是更改列表框上的标记属性,以使所有功能正常工作

首先,我修改了Listbox的默认模板,以包括一个新的网格和一个文本框,如下所示:

原始XAML

<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3" Margin="0">
    <ScrollViewer x:Name="ScrollViewer" Background="Transparent" BorderBrush="Transparent" BorderThickness="0" Margin="0" Padding="0" TabNavigation="{TemplateBinding TabNavigation}">
        <ItemsPresenter Margin="0,0" />
    </ScrollViewer>
</Border>
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3" Margin="0">
    <Grid >
        <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}" VerticalAlignment="Center" HorizontalAlignment="Center" Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource.Count, Converter={StaticResource ListCount2Visibility}}" Foreground="{StaticResource NormalFontBrush}" FontSize="{StaticResource DefaultFontSize}" />

        <ScrollViewer x:Name="ScrollViewer" Background="Transparent" BorderBrush="Transparent" BorderThickness="0" Margin="0" Padding="0" TabNavigation="{TemplateBinding TabNavigation}">
            <ItemsPresenter Margin="0,0" />
        </ScrollViewer>
    </Grid>
</Border>
值转换器检查ItemSource.Count是否=0…如果是,则将可见性设置为可见。否则,它就会崩溃

然后,新文本块的文本属性绑定到列表框的标记属性。(这并不理想,但它是将文本放入控件的最快方法。显然,如果您将tag属性用于其他用途,这将不起作用)

因此,基本上,您将标记设置为要显示的消息,并且只要列表中没有任何项目,就会显示文本框(水平和垂直居中)。在开发过程中,您的消息将显示,因为列表是空的(假设现在是设计时datacontext),这使文本可视化变得很好

这就是它的全部


如果需要,甚至可以将listbox的tag属性绑定到viewmodel以更改文本。因此,您可以在从数据库返回项目时执行“加载…”之类的操作,然后在加载所有内容后将其更改为“空列表”消息。(当然忙碌指示器可能更好)

不知道WP7是否有,但一个后备值可能有用。
public sealed class ListCount2Visibility : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null && (int)value > 0 )
            return "Collapsed";
        else
            return "Visible";

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}