【问题标题】:Styling ListBox with Static Content使用静态内容为 ListBox 设置样式
【发布时间】:2011-04-05 16:22:47
【问题描述】:

我在ListBox 控件中有一组我想要的静态内容。

<ListBox>
    <ListBox.Items>
        <ListBoxItem>
            <Image />
            <TextBlock Text="One" />
        </ListBoxItem>
        <ListBoxItem>
            <Image />
            <TextBlock Text="Two" />
        </ListBoxItem>
        <ListBoxItem>
            <Image />
            <TextBlock Text="Three" />
        </ListBoxItem>
    </ListBox.Items>
</ListBox>

我该如何设计这个样式?我知道我可以单独设置每个ListBoxItem 的样式,并且我知道如何在数据绑定时设置样式,但是在使用这样的静态内容时如何设置列表框项模板的样式?

【问题讨论】:

    标签: xaml windows-phone-7 listbox styling


    【解决方案1】:

    您可以将项目定义为低级对象并使用数据模板,这可能与样式不同,但属性也只设置一次:

    <ListBox xmlns:sys="clr-namespace:System;assembly=mscorlib">
        <ListBox.Items>
            <sys:String>one</sys:String>
            <sys:String>two</sys:String>
            <sys:String>three</sys:String>
        </ListBox.Items>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <!-- "Style" this at will -->
                <StackPanel>
                    <Image />
                    <TextBlock Text="{Binding}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    要设置包装 ListBoxItems 的样式,您可以尝试使用ListBox.Resources中定义的隐式样式


    以下仅适用于 WPF

    给ListBox的资源添加样式,只设置TargetType,不设置x:Key,会自动应用。

    您甚至可以使用资源嵌套这个自动应用程序,例如:

    <ListBox>
        <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Resources>
                    <Style TargetType="{x:Type Image}">
                        <Setter Property="Width" Value="100"/>
                    </Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Foreground" Value="Blue"/>
                    </Style>
                </Style.Resources>
            </Style>
        </ListBox.Resources>
        <!-- Items here -->
    </ListBox>
    

    【讨论】:

    • 我在 WP7 设备上执行此操作,显然这种格式不起作用。 x:Type 不是架构的一部分。 Style 节点上没有 Style.Resources。可能手机的架构声明不同,或者手机不支持这种方式。
    • 对,您可能不应该用 WPF 标记 WP7 问题,因为它不完全相同,就像 Silverlight 一样,它代表 WPF 的一个子集,而那些事情在那里不可能,这是一种耻辱。顺便说一下不需要x:Type,在这种情况下你可以只输入名称,因为编译器知道字符串需要转换为类型,但是我不知道如何处理缺少Style.Resources,对不起。
    • 我会更改标签。我认为样式不会有所不同。
    • @Josh:我刚刚又看了一遍并添加了另一种方法,希望这可行(我只能用普通 Silverlight 测试它)
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2021-01-29
    • 2021-10-04
    • 2013-11-29
    相关资源
    最近更新 更多