אתגרת אותי.
דבר ראשון, טעיתי בנוגע ל"טעויות" שלך. לפחות הראשונה. XAML בטח מגדיר את המחלקה. פשוט טעות גסה שלי.
אז נמחק את הטעות הראשונה ואת המסקנה שבאה בעקבותיה.
גם כן הייתי פזיז בקשר למחלקה, שאכן נצרכת, כדי לעשות שימוש חוזר בסטייל שכל פעם הנתיב שלו שונה.
אז בסוף פתחתי את הרפלקטור כדי לראות בדיוק איך נוצרים התאים ובאיזה רמה הקונקסט/בינדינג מוזרקים.
והמסקנה היא כזו מחלקה:
Public Class DataGridActiveColumn
Inherits DataGridBoundColumn
Protected Overrides Function GenerateEditingElement(cell As DataGridCell, dataItem As Object) As FrameworkElement
Return Nothing
End Function
Protected Overrides Function GenerateElement(cell As DataGridCell, dataItem As Object) As FrameworkElement
If Binding IsNot Nothing Then
BindingOperations.SetBinding(cell, DataGridCell.DataContextProperty, Binding)
End If
Return Nothing
End Function
End Class
הנה הדגמה:
<Grid>
<Grid.Resources>
<Style TargetType="DataGridCell" >
<Style.Setters>
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate>
<Grid Height="50" Width="50" >
<Path Data="M -1,0 A 1,1 0 1 1 1,0 M -1,0 A 1,1 0 1 0 1,0" Stretch="Fill" >
<Path.Style>
<Style TargetType="Path">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="1">
<Setter Property="Fill" Value="Yellow" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="0">
<Setter Property="Fill" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="2">
<Setter Property="Fill" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Path.Style>
</Path>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Grid.Resources>
<DataGrid >
<DataGrid.Items>
<Button Width="0"/>
<Button Width="1" />
<Button Width="2" />
</DataGrid.Items>
<DataGrid.Columns>
<local:DataGridActiveColumn Binding="{Binding Width}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
פורסם במקור בפורום CODE613 ב02/04/2015 17:29 (+03:00)