Silverlight 4 DataGrid 列周围的边框

发布于 2024-09-26 16:16:32 字数 1924 浏览 1 评论 0原文

无论如何,我一直无法找到在 silverlight 数据网格中的列周围动态添加边框的方法。这是我的数据网格的 xaml:

<sdk:DataGrid x:Name="PlannedAndBookedMonthlyTable" ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="5,0,5,5">
   <sdk:DataGrid.Columns>
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderName" Header="" Binding="{Binding SeriesName}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderJan" Header="Jan" Binding="{Binding JanValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderFeb" Header="Feb" Binding="{Binding FebValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderMar" Header="Mar" Binding="{Binding MarValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderApr" Header="Apr" Binding="{Binding AprValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderMay" Header="May" Binding="{Binding MayValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderJun" Header="Jun" Binding="{Binding JunValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderJul" Header="Jul" Binding="{Binding JulValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderAug" Header="Aug" Binding="{Binding AugValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderSep" Header="Sep" Binding="{Binding SepValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderOct" Header="Oct" Binding="{Binding OctValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderNov" Header="Nov" Binding="{Binding NovValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderDec" Header="Dec" Binding="{Binding DecValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderTotal" Header="Total" Binding="{Binding Total}" />
   </sdk:DataGrid.Columns>
</sdk:DataGrid>

这是我想要实现的效果:

alt text

如何设置边框取决于当前日历月份的数据列?

I haven't been able to find anyway to dynamically add a border around a column in a silverlight datagrid. Here is my xaml of my datagrid:

<sdk:DataGrid x:Name="PlannedAndBookedMonthlyTable" ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="5,0,5,5">
   <sdk:DataGrid.Columns>
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderName" Header="" Binding="{Binding SeriesName}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderJan" Header="Jan" Binding="{Binding JanValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderFeb" Header="Feb" Binding="{Binding FebValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderMar" Header="Mar" Binding="{Binding MarValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderApr" Header="Apr" Binding="{Binding AprValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderMay" Header="May" Binding="{Binding MayValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderJun" Header="Jun" Binding="{Binding JunValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderJul" Header="Jul" Binding="{Binding JulValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderAug" Header="Aug" Binding="{Binding AugValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderSep" Header="Sep" Binding="{Binding SepValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderOct" Header="Oct" Binding="{Binding OctValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderNov" Header="Nov" Binding="{Binding NovValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderDec" Header="Dec" Binding="{Binding DecValue}" />
      <sdk:DataGridTextColumn x:Name="MonthlyHeaderTotal" Header="Total" Binding="{Binding Total}" />
   </sdk:DataGrid.Columns>
</sdk:DataGrid>

This is the effect that I want to accomplish:

alt text

How do I set the border on a column of data that depends on what current calendar month it is?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酷炫老祖宗 2024-10-03 16:16:33

DataGrid 中的每一行都是一个模板,每个单元格也是如此。普通的 DataGrid 没有单元格和当前单元格位置的概念,只有选定的行。

如果您能够获得足够的位置信息,我会说您可以在 DataGrid 上覆盖边框,但调试器显示 DataGrid 中没有足够的信息来计算当前选定单元格的位置。

一种可能的选择

我能想到的使用 DataGrid 执行此操作的唯一方法是捕获单个单元格控件(例如 DataGrid 中的文本框)上的焦点事件,并使用所选控件相对于父控件的位置计算出边界位置。每列都需要是模板化列,以便您可以连接 GotFocus 事件。

否则...

...您将需要尝试不同类型的控制才能获得您正在寻求的结果。

您可以使用普通的旧网格,例如充满文本框控件,但您需要自己处理网格的选择和键盘导航。

如果预算允许,我会寻找 Silverlight 的第 3 方电子表格控件。否则看看是否有人在 Codeplex 或其他地方构建了一个。

Each row in a DataGrid is a template, as is each cell. The normal DataGrid has no concept of cells and current cell positions, just selected rows.

If you were able to get enough positional information I would say you could overlay a border over the DataGrid, but the debugger shows me there is not enough information available in a DataGrid to even calculate the position of the current selected cell.

One possible option

The only way I can think of doing this with a DataGrid is catching focus events on the individual cell controls (e.g. TextBoxes in the DataGrid) and use the position of the selected control relative to the parent to work out the border position. Each column will need to be a templated column so that you can hook up the GotFocus events.

Otherwise...

...you will need to try a different sort of control to get the result you are seeking.

You could use a plain old Grid, e.g. full of TextBox controls, but you will need to handle selection and keyboard navigation of the grid yourself.

If budget permits, I would look around for a 3rd party spreadsheet control for Silverlight. Otherwise see if anyone has built one on Codeplex or elsewhere.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文