Styling ListBox со статическим содержимым - PullRequest
3 голосов
/ 05 апреля 2011

У меня есть набор статического контента, который я хочу в 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 по отдельности, и я знаю, как стилировать при привязке данных, но как мне стилизовать шаблон элемента списка при использовании статического содержимого, подобного этому?

1 Ответ

2 голосов
/ 05 апреля 2011

Вы можете определить элементы как низкоуровневые объекты и использовать шаблоны данных, которые могут не совпадать со стилями, но свойства также устанавливаются только один раз:

<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>
...