使用Silverlight DataGrid包装的行

时间:2011-01-04 21:28:50

标签: silverlight datagrid

我正在尝试设置Silverlight DataGrid的样式,以便网格中显示的内容包装。我希望每个网格行(和网格标题)由两行单元格而不是一行组成。这使得每一行都更高,但同时保持所有内容在屏幕上可见,而不必水平滚动以查看所有字段。这是一张图片,以帮助说明我的目标:

Screenshot (我没有足够的代表直接发布图像,但上面的链接会显示一个示例屏幕截图)

我看到模板可以让我自定义不同单元格的样式,但是我没有看到任何可以让我控制这些单元格在屏幕上彼此显示的方式。

1 个答案:

答案 0 :(得分:1)

这里最好的选择是放弃数据网格而使用ListView,而在ListView中你需要显示自己设计的UserControl。我为我构建的应用程序做了类似的事情。

在您的ListView的XAML中,您需要设置ItemContainerStyle并在其中显示您想要显示自定义UserControl(您可以使用网格来设置行/列及其跨度)。它基本上是这样的:

<ListView 
      Name="_listView"
       Grid.Row="0" Grid.Column="0"
      SelectionMode="Single"   
      IsSynchronizedWithCurrentItem="True"
      SelectedItem="{Binding SelectedAgent, Mode=TwoWay}"
      ItemsSource="{Binding Agents, Mode=OneWay}" 
      GridViewColumnHeader.Click="ListView_Click"
      DependencyProperties:ListBoxClickCommand.ClickCommand="{Binding ShowAgentDetailsCommand}">
      <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="ListViewItem">
                <Border 
                  Name="_border"
                  Padding="2"
                  CornerRadius="5" 
                  SnapsToDevicePixels="true"
                  Background="Transparent">
                    <Controls:AgentStateControl></Controls:AgentStateControl>
                </Border>
                <ControlTemplate.Triggers>
                  <Trigger Property="IsSelected" Value="True">
                    <Setter TargetName="_border" Property="Background" Value="CornflowerBlue" />
                  </Trigger>
                </ControlTemplate.Triggers>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </ListView.ItemContainerStyle>

AgentStateControl是我的自定义控件,它有两行,第二行在列上有更大的跨度。您可以根据需要创建该控件。