首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LongListSelector空样式

LongListSelector空样式
EN

Stack Overflow用户
提问于 2014-10-23 13:08:04
回答 2查看 84关注 0票数 1

TextBlock没有项目时,我想显示LongListSelector。我可以对我的应用程序中的每一个列表都这样做,但这并不明智。所以我试着编辑列表样式,并对每个列表进行编辑。

如何将LongListSelector ItemsSouce计数绑定到它的样式中?

这就是我现在的处境。

代码语言:javascript
复制
<Style TargetType="phone:LongListSelector">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="phone:LongListSelector">
                <Grid Background="{TemplateBinding Background}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="ScrollStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="00:00:00.5" />
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Scrolling">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="VerticalScrollBar" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="NotScrolling" />
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Grid Margin="{TemplateBinding Padding}">
                        <i:Interaction.Triggers>
                            <!-- HERE I CANT BIND TO COUNT -->
                            <ec:DataTrigger Binding="{TemplateBinding ItemsSource}" Comparison="Equal" Value="0">
                                <ec:ChangePropertyAction TargetObject="{Binding ElementName=EmptyListText}" PropertyName="Visibility" Value="Visible" />
                            </ec:DataTrigger>
                        </i:Interaction.Triggers>
                        <ViewportControl x:Name="ViewportControl" HorizontalContentAlignment="Stretch" VerticalAlignment="Top" />
                        <ScrollBar x:Name="VerticalScrollBar" Opacity="0" Background="{StaticResource ThemeBackground}" HorizontalAlignment="Right" Orientation="Vertical" />
                        <TextBlock x:Name="EmptyListText" Visibility="Collapsed" Text="{Binding Source={StaticResource Literals}, Path=Literals.noResults}" />
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-23 22:39:24

这是一个DataBinding问题。

尝试将其附加到TemplateParent (即LongListSelector),如下所示:

代码语言:javascript
复制
<ec:DataTrigger
    Binding="{Binding RelativeSource={RelativeSource Mode=TemplateParent}, Path=ItemsSource.Count}"
    Comparison="Equal" Value="0">
</ec:DataTrigger>

如果你想要使用你的触发器,这应该会让你明白。

我喜欢使用Converters。理解起来有点简单,所以这里是使用转换器的完整解决方案。

代码语言:javascript
复制
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Data;

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
            return Visibility.Collapsed;
        else
        {
            if (value is System.Collections.IList)
            {
                System.Collections.IList list = (System.Collections.IList)value;
                if (list.Count == 0)
                    return Visibility.Collapsed;
                else
                    return Visibility.Visible;

            }
            else
                return Visibility.Collapsed;                
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

因此,LongListSelector风格是:

代码语言:javascript
复制
<TextBlock Visibility="{Binding ItemsSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource MyConverter}}"></TextBlock>
票数 0
EN

Stack Overflow用户

发布于 2014-10-23 17:43:50

根据long list选择器创建一个自定义复合控件,它可以完成所需的任务,并且具有根据依赖项属性显示特定消息的智能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26528851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档