silverlight 3 datagrid样式设置问题

taotbuaa 2010-04-09 02:26:11
最近在用datagrid做报表,在过程中,遇到很多类似的datagrid结构,例如下面的一个简单datagrid


<data:DataGrid>
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="星期日"/>
<data:DataGridTextColumn Header="星期一"/>
<data:DataGridTextColumn Header="星期二"/>
<data:DataGridTextColumn Header="星期三"/>
<data:DataGridTextColumn Header="星期四"/>
<data:DataGridTextColumn Header="星期五"/>
<data:DataGridTextColumn Header="星期六"/>
</data:DataGrid.Columns>
</data:DataGrid>

重复多次出现,我现在的做法是,每次都将上面的代码重复一遍,十分讨厌。
我想请问各位高人,能不能将上面的格式封装成style?
我尝试写了一下

<Style x:Name="MyDataGrid" TargetType="data:DataGrid">
<Setter Property="Columns">
<Setter.Value>
</Setter.Value>
</Setter>
</Style>

这样根本不行,因为setter.value里头不能写多个控件啊。
这样是不是不行?各位大哥大姐帮帮小弟想想办法哈?一直重复同样的代码,太麻烦了,而且程序看起来太不简洁了
...全文
636 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
senr0816 2010-04-13
  • 打赏
  • 举报
回复
用style完全可以实现,你应该这样:

<Style x:Name="DataGridStyle" TargetType="data:DataGrid">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="data:DataGrid">
<data:DataGrid>
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="星期日"/>
<data:DataGridTextColumn Header="星期一"/>
<data:DataGridTextColumn Header="星期二"/>
<data:DataGridTextColumn Header="星期三"/>
<data:DataGridTextColumn Header="星期四"/>
<data:DataGridTextColumn Header="星期五"/>
<data:DataGridTextColumn Header="星期六"/>
</data:DataGrid.Columns>
</data:DataGrid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>


然后用的时候,这样就行啦~

<data:DataGrid Style="{StaticResource DataGridStyle}"></data:DataGrid>
TimDavid 2010-04-13
  • 打赏
  • 举报
回复
hi taotbuaa,
Style是有关控件式样的问题,就是控件的外观。
这里用style我想不能实现。
我觉得用Binding好点。
现在你的问题就是,如果上面的我要你换成第一列从星期一开始
那么你的所有的列头都要改。
如果你有20个这样的DataGrid话,改起来很麻烦。
如果这个控件你经常要用最好把它封装下。
下次直接引用它就可以了。
taotbuaa 2010-04-13
  • 打赏
  • 举报
回复
没人知道么....没人知道的话,只能ctrl+c跟ctrl+v了
websco 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 senr0816 的回复:]
用style完全可以实现,你应该这样:

XML code

<Style x:Name="DataGridStyle" TargetType="data:DataGrid">
<Setter Property="Template">
<Setter.Value>
<Cont……
[/Quote]

使用 ControlTemplate 的话,如果要访问 ControlTemplate 中的控件会成问题,不过在这里是要设置 DataGrid.Columns , 本身就应当不存在访问 ControlTemplate 中的控件的要求。 支持3楼。

绑定也是可以直接写在 ControlTemplate 中的,如

<data:DataGridTextColumn Header="星期日" Binding="{Binding SunData}"/>


不过,从合理性去考虑的话,最好还是不要这样设置DataGrid的Style,因为硬编码的味道很大。
比如,如果要求为星期日至星期六的Header使用多语言,那这样设置Style就出问题了(本身Header就是非依赖项属性,在XAML中绑定多语言本来就是问题)。 楼主的要求可以像2楼说的封装为控件,或者简单些,通过后台代码为DataGrid添加列,根据参数实现灵活性(如指定本地化语言的Header、Binding、Converter、DataGridTextColumn/DataGridCheckBoxColumn类型等)。 还有一种实现方法也许也可行,就是像使用动态 DataTemplate 那样,将整个DataGrid的XAML代码保存在string变量中,通过System.Windows.Markup.XamlReader.Load()来动态加载 DataGrid。
taotbuaa 2010-04-13
  • 打赏
  • 举报
回复
我想继续问一下,用style实现后,该如何才能给每一列绑定内容呢?例如我想把下面的数据结构对应的数据绑定到各列

public class SingEquWeekReportDataItem
{
public string SunData { get; set; }
public string MonData { get; set; }
public string TueData { get; set; }
public string WenData { get; set; }
public string ThuData { get; set; }
public string FriData { get; set; }
public string SatData { get; set; }
}

这该如何bing呢?
taotbuaa 2010-04-13
  • 打赏
  • 举报
回复
马上试试,谢谢了

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧