数据模板 vs 项容器样式

9
我看到了一些关于Silverlight的问题,但没有找到这个特定比较的答案。
我试图定义我的对象绑定到一个 ListBox 的显示方式。我已经定义了一个 DataTemplate,但我真的不确定这应该在哪里结束,ItemContainerStyle 应该从哪里开始。
问题1: ItemContainerStyleDataTemplate 的包装器,以便可以将通用项目样式应用于不同的数据布局吗?
问题1a: 如果不需要通用项目样式,那么在 DataTemplate 中是否可以定义所有布局和样式,而无需使用 ItemContainerStyle
问题1b: 如果不是,那是什么? ListBox 目前是这样的:
<ListBox Margin="40,118,41,61" ItemTemplate="{StaticResource TaskDataTemplate}"/>

我的DataTemplate的XAML如下:

<DataTemplate x:Key="TaskDataTemplate">
        <Grid d:DesignHeight="95" Height="150">
            <StackPanel Margin="11,8,-10,68" Orientation="Horizontal" d:LayoutOverrides="Width">
                <TextBlock x:Name="TaskLabel" Margin="0,0,0,8" Style="{StaticResource TitleTextSmall}" TextWrapping="Wrap" Text="Task" VerticalAlignment="Stretch" d:LayoutOverrides="Height"/>
                <TextBlock x:Name="TaskID" HorizontalAlignment="Right" Margin="10,0,0,0" Style="{StaticResource TitleTextSmall}" TextWrapping="Wrap" Text="TaskID" VerticalAlignment="Stretch" d:LayoutOverrides="Height"/>
                <TextBlock x:Name="ChangeList" Style="{StaticResource NormalText}" TextWrapping="Wrap" Text="Changes..." Margin="30,2,0,0"/>
            </StackPanel>
            <ComboBox x:Name="TaskType" Style="{StaticResource TaskComboBox}" Height="29" VerticalAlignment="Top" Margin="131,30,16,0" d:LayoutOverrides="VerticalAlignment"/>
            <TextBlock x:Name="TaskTypeLabel" Margin="12,39,0,0" Style="{StaticResource NormalTextBold}" TextWrapping="Wrap" Text="Variation Reason" VerticalAlignment="Top" HorizontalAlignment="Left" Height="21"/>
            <TextBox x:Name="TaskDescription" Margin="12,70,15,11" TextWrapping="Wrap" Text="Enter description..." Style="{StaticResource TaskTextBox}" d:LayoutOverrides="VerticalAlignment"/>
        </Grid>
    </DataTemplate>

谢谢。


这个回答解决了你的问题吗?在WPF ListBox中,ItemTemplate和ItemContainerStyle有什么区别? - StayOnTarget
1个回答

10

答案1:是的

答案1a:就我所知,您可以在ItemTemplate中完成所有样式设置,但是ItemContainerStyle具有控制鼠标悬停/禁用/选定等状态透明度的VisualStates。

如果您想更改这些透明度状态变化,或者如果您想要任何容器形状不是矩形的东西,例如三角形,那么您将不得不覆盖默认的ItemContainerStyle。


此外,对于容器形状,我能否将DataTemplate的内容分组到一个边框中,并在其上设置圆角?只有复杂的形状才需要使用ItemContainerStyle吗? - Town
好的,在我的示例中,ItemTemplate周围的边框位于ItemContainerStyle的边框内,因此您可能希望将边框添加到ItemContainerStyle而不是ItemTemplate中。 - BenCr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接