Silverlight Listbox自定义样式

时间:2010-12-18 08:18:30

标签: silverlight listbox contentcontrol

我在资源文件中定义了一个样式,如下面的

   <Style x:Name="ListBoxStyle" TargetType="ListBox" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBox">                    
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name,Mode=TwoWay}" 
                               Margin="5" 
                               Foreground="Red">
                    </TextBlock>
                    <TextBlock Text="{Binding Age,Mode=TwoWay}" 
                               Margin="5">
                    </TextBlock>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>    
</Style>

我对在数据模板中放置什么感到遗憾

<ListBox x:Name="MyList" ItemsSource="{Binding }">
    <ListBox.ItemTemplate>
        <DataTemplate>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我尝试使用

<ContentPresenter Style="{StaticResource ListBoxStyle}"></ContentPresenter> 

甚至

<ContentControl Style="{StaticResource ListBoxStyle}"></ContentControl>`

但是出现了这个错误

  

无法分配属性'System.Windows.FrameworkElement.Style'。

如果我想提供自定义样式,我在DataTemplate代码之间放什么?

1 个答案:

答案 0 :(得分:0)

尝试:

<ListBox x:Name="MyList" ItemsSource="{Binding }">
    <ListBox.ItemTemplate>
        <DataTemplate>
<StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name,Mode=TwoWay}" 
                               Margin="5" 
                               Foreground="Red">
                    </TextBlock>
                    <TextBlock Text="{Binding Age,Mode=TwoWay}" 
                               Margin="5">
                    </TextBlock>
                </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这个shpuld解决了你的问题。

如果定义样式,则定义ListBox的外观(Background,Foreground,...)。 您可以在此处获取默认样式:http://msdn.microsoft.com/en-us/library/cc278062(v = vs.95).aspx

ItemTemplate(它是一个DataTemplate)定义了列表中单个元素的数据表示方式(使用绑定等等)。

如果要为单个元素定义样式,例如MouseOver,Focussed,...,您可以为ListBoxItems编写样式。您可以通过ItemContainerStyle将其添加到列表框中。

<ListBox ItemContainerStyle="{StaticResource YourResourceKey}"/>