如何解决合并Silverlight DataGrid中的标题行
| 我正在尝试获取具有以下格式的表:Header 1 | Header 2
Col1 | Col2 | Col3 Col4
在使用Silverlight时。
我搜索了,但没有成功。
有任何想法吗?
[编辑]
我已经找到了这篇博客文章,但是数据和列标题没有对齐。
合并Silverlight DataGrid标头
解决方法
我对编辑后的问题中提到的阻止项感到很幸运。确实,标头和数据单元未对齐。您需要手动调整这些尺寸以匹配。在期望数据字段具有共同指定宽度的情况下,此方法会很好地工作。供参考,我在这里复制此解决方案:
<Style x:Key=\"DataGridBaseHeaderStyle\" TargetType=\"dataprimitives:DataGridColumnHeader\">
<Setter Property=\"FontWeight\" Value=\"Bold\" />
</Style>
<Style x:Key=\"TimeSheetTotalsHeaderStyle\" TargetType=\"dataprimitives:DataGridColumnHeader\"
BasedOn=\"{StaticResource TimeSheetDayHeaderStyle}\">
<Setter Property=\"Foreground\" Value=\"#FFFF0000\"/>
</Style>
<Style x:Key=\"TimeSheetDayHeaderStyle\" TargetType=\"dataprimitives:DataGridColumnHeader\"
BasedOn=\"{StaticResource DataGridBaseHeaderStyle}\">
<Setter Property=\"Foreground\" Value=\"#FF000000\"/>
<Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>
<Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>
<Setter Property=\"IsTabStop\" Value=\"False\"/>
<Setter Property=\"SeparatorBrush\" Value=\"#FFC9CACA\"/>
<Setter Property=\"Padding\" Value=\"8\"/>
<Setter Property=\"Template\">
<Setter.Value>
<ControlTemplate>
<Grid x:Name=\"Root\">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width=\"Auto\"/>
</Grid.ColumnDefinitions>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name=\"CommonStates\">
<VisualState x:Name=\"Normal\"/>
<VisualState x:Name=\"MouseOver\">
<Storyboard>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundRectangle\"
Storyboard.TargetProperty=\"(Fill).Color\" To=\"#FF448DCA\"/>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundGradient\"
Storyboard.TargetProperty=\"(Fill).(GradientStops)[3].Color\" To=\"#7FFFFFFF\"/>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundGradient\"
Storyboard.TargetProperty=\"(Fill).(GradientStops)[2].Color\" To=\"#CCFFFFFF\"/>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundGradient\"
Storyboard.TargetProperty=\"(Fill).(GradientStops)[1].Color\" To=\"#F2FFFFFF\"/>
</Storyboard>
</VisualState>
<VisualState x:Name=\"Pressed\">
<Storyboard>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundRectangle\"
Storyboard.TargetProperty=\"(Fill).Color\" To=\"#FF448DCA\"/>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundGradient\"
Storyboard.TargetProperty=\"(Fill).(GradientStops)[0].Color\" To=\"#D8FFFFFF\"/>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundGradient\"
Storyboard.TargetProperty=\"(Fill).(GradientStops)[1].Color\" To=\"#C6FFFFFF\"/>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundGradient\"
Storyboard.TargetProperty=\"(Fill).(GradientStops)[2].Color\" To=\"#8CFFFFFF\"/>
<ColorAnimation Duration=\"0\"
Storyboard.TargetName=\"BackgroundGradient\"
Storyboard.TargetProperty=\"(Fill).(GradientStops)[3].Color\" To=\"#3FFFFFFF\"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name=\"SortStates\">
<VisualState x:Name=\"Unsorted\"/>
<VisualState x:Name=\"SortAscending\" />
<VisualState x:Name=\"SortDescending\" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name=\"BackgroundRectangle\" Fill=\"#FF1F3B53\" Stretch=\"Fill\" Grid.ColumnSpan=\"2\"/>
<Rectangle x:Name=\"BackgroundGradient\" Stretch=\"Fill\" Grid.ColumnSpan=\"2\">
<Rectangle.Fill>
<LinearGradientBrush EndPoint=\".7,1\" StartPoint=\".7,0\">
<GradientStop Color=\"#FCFFFFFF\" Offset=\"0.015\"/>
<GradientStop Color=\"#F7FFFFFF\" Offset=\"0.375\"/>
<GradientStop Color=\"#E5FFFFFF\" Offset=\"0.6\"/>
<GradientStop Color=\"#D1FFFFFF\" Offset=\"1\"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Grid HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"
VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">
<Grid.RowDefinitions>
<RowDefinition Height=\"20\" />
<RowDefinition Height=\"1\" />
<RowDefinition Height=\"20\" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=\"50\"/>
<ColumnDefinition Width=\"1\" />
<ColumnDefinition Width=\"50\"/>
</Grid.ColumnDefinitions>
<!-- Row 0 -->
<!-- This was edited in order to work in Silvelight 4 -->
<ContentPresenter Content=\"Content=\"{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content}\"
VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"
Grid.ColumnSpan=\"3\" />
<!-- Row 1 -->
<Rectangle Fill=\"#FFC9CACA\" VerticalAlignment=\"Stretch\" Height=\"1\"
Visibility=\"Visible\" Grid.Row=\"1\" Grid.ColumnSpan=\"3\" />
<!-- Row 2 -->
<ContentPresenter Content=\"Qty\" Grid.Row=\"2\" VerticalAlignment=\"Center\"
HorizontalAlignment=\"Center\" />
<Rectangle Fill=\"#FFC9CACA\" VerticalAlignment=\"Stretch\" Width=\"1\"
Visibility=\"Visible\" Grid.Row=\"2\" Grid.Column=\"1\" />
<ContentPresenter Content=\"Hours\" Grid.Row=\"2\" Grid.Column=\"2\"
VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" />
</Grid>
<Rectangle x:Name=\"VerticalSeparator\" Fill=\"#FFC9CACA\"
VerticalAlignment=\"Stretch\" Width=\"1\" Visibility=\"Visible\"
Grid.Row=\"1\" Grid.Column=\"1\"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
为了与Silverlight 4配合使用,对原始样式进行了稍微的编辑(更多详细信息在这里)。
您还需要定义一个与标题的宽度匹配的固定宽度的TextBox样式:
<Style x:Key=\"TimeSheetTextBoxStyle\" TargetType=\"TextBox\">
<Setter Property=\"Width\" Value=\"50\"></Setter>
<Setter Property=\"Background\" Value=\"Transparent\"></Setter>
<Setter Property=\"BorderThickness\" Value=\"0\"></Setter>
</Style>
在DataGrid中使用样式:
<data:DataGridTemplateColumn Header=\"Tue\" HeaderStyle=\"{StaticResource TimeSheetDayHeaderStyle}\">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation=\"Horizontal\">
<TextBox Text=\"{Binding TuesdayQuantity}\" Style=\"{StaticResource TimeSheetTextBoxStyle}\"/>
<Rectangle Fill=\"#FFC9CACA\" VerticalAlignment=\"Stretch\" Width=\"1\" />
<TextBox Text=\"{Binding TuesdayHours}\" Margin=\"2,0\" Style=\"{StaticResource TimeSheetTextBoxStyle}\"/>
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。