Я создаю пользовательский пользовательский элемент управления в Silverlight 4. Идея этого элемента заключается в перемещении сетки данных с помощью пейджера со страницы пользователя на элемент управления.В настоящее время сетка данных выглядит следующим образом:
<sdk:DataGrid x:Name="GridCustomers" Height="300" VerticalAlignment="Top" ItemsSource="{Binding CustomerModelsPagedCollectionView}" AutoGenerateColumns="False" ScrollViewer.VerticalScrollBarVisibility="Visible" IsReadOnly="True" SelectionChanged="GridCustomers_SelectionChanged">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Numer bilingowy" Binding="{Binding BillingNumber}" />
<sdk:DataGridTextColumn Header="Nazwa klienta" Binding="{Binding CustomerName}"/>
<sdk:DataGridTextColumn Header="Skrócona nazwa" Binding="{Binding ShortCustomerName}"/>
<sdk:DataGridTextColumn Header="Kod pocztowy" Binding="{Binding PostalCode}" />
<sdk:DataGridTextColumn Header="Miasto" Binding="{Binding City}" />
<sdk:DataGridTextColumn Header="Ulica" Binding="{Binding Street}" />
<sdk:DataGridTemplateColumn Header="Urządzenia">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="DeviceComboBox" SelectionChanged="DeviceComboBox_SelectionChanged">
<ComboBox.Items>
<ComboBoxItem x:Name="Switch" Content="Switche"/>
<ComboBoxItem x:Name="Firewall" Content="Firewalle"/>
<ComboBoxItem x:Name="Host" Content="Hosty" />
</ComboBox.Items>
</ComboBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
Чего я больше всего хотел добиться, кроме удаления повторяющегося кода этой сетки с нескольких страниц, - это гибкости этого элемента управления для определения пользователем этого столбца шаблона.Другими словами, я пытаюсь выставить свойство столбца DataGrid, чтобы можно было добавить разные DataGridTemplateColumns.Поскольку у меня небольшой опыт работы с SL, я провел некоторые исследования, и в соответствии с тем, что я нашел, «присоединенных свойства» - это то, что мне нужно (для этого нужно подтверждение).Я определил DependencyProperty, используя этот учебник. вот так (управляющий код - CustomerControl):
public static readonly DependencyProperty ColumnTemplateProperty = DependencyProperty.RegisterAttached(
"ColumnTemplate",
typeof(DataGridTemplateColumn),
typeof(CustomerControl),
null);
public static void SetColumnTemplate(DependencyObject obj, DataGridTemplateColumn column)
{
obj.SetValue(ColumnTemplateProperty, column);
}
public static DataGridTemplateColumn GetColumnTemplate(DependencyObject obj)
{
return (DataGridTemplateColumn)obj.GetValue(ColumnTemplateProperty);
}
XAML элемента управления:
<local:CustomerControl x:Name="temp" >
<local:CustomerControl.ColumnTemplate>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="DeviceComboBox" SelectionChanged="DeviceComboBox_SelectionChanged">
<ComboBox.Items>
<ComboBoxItem x:Name="Switch" Content="Switche"/>
<ComboBoxItem x:Name="Firewall" Content="Firewalle"/>
<ComboBoxItem x:Name="Host" Content="Hosty" />
</ComboBox.Items>
</ComboBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</local:CustomerControl.ColumnTemplate>
</local:CustomerControl>
Поскольку я выставил свойство типа 'DataGridTemplateColumn 'Я боролся с остальным объявлением шаблона, оно не изменится, но это не работает :( Я не уверен насчет прикрепленных свойств. Не могли бы вы дать мне несколько советов, как заставить это работать так, как я представил (или долженЯ говорю «вообразил», как я хочу, чтобы это работало.) Возможно ли это? Я осознаю тот факт, что здесь есть некоторые серьезные недостатки, но для справки: ошибки, которые я получаю:
Ошибка 3 Встраиваемое свойство CellTemplate не найдено в типе DataGridTemplateColumn Ошибка 2 Неожиданное свойство в правиле синтаксического анализа PropertyElement :: =. PROPERTYELEMENT Content? ENDTAG
Спасибо за любой указатель;)