У меня есть пользовательский элемент управления, который отображает объекты объявленного клиентом типа с некоторым специализированным поведением. Я хотел бы использовать дженерики. Однако я не уверен, как объявить это в XAML:
<local:EditableListBox x:Name="SectionList" Margin="56,8,15,0" FontSize="64" SelectionChanged="SectionList_SelectionChanged" />
ListBox
использует object
членов, что наводит меня на мысль, что, возможно, здесь нет способа обеспечить безопасность типов. Или есть?
(я создаю приложение для Windows Phone 7, если оно имеет какое-либо значение.)
Обновление : у меня все в порядке с отсутствием обобщений в XAML, но я все еще пытаюсь выяснить, как установить его в коде. Я все параметризовал, но он все еще жалуется.
Код:
public partial class EditableListBox<T> : UserControl, INotifyPropertyChanged where T : IEditableListMember {
public EditableListBox()
{
// Error: The name 'InitializeComponent' does not exist in the current context
InitializeComponent();
Loaded += new RoutedEventHandler(EditableListBox_Loaded);
}
// ...
public int SelectedIndex
{
get
{
// Error: The name 'ContentListBox' does not exist in the current context
return ContentListBox.SelectedIndex;
}
set
{
// Error: The name 'ContentListBox' does not exist in the current context
ContentListBox.SelectedIndex = value;
}
}
XAML:
<Grid x:Name="LayoutRoot">
<ListBox x:Name="ContentListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid ManipulationCompleted="Grid_ManipulationCompleted">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="{Binding IconSource}"
Grid.Column="0"
Width="96"
Height="96"
VerticalAlignment="Center"
Visibility="{Binding Editing, Converter={StaticResource visibilityConverter}}"
/>
<TextBlock Text="{Binding Name}"
Grid.Column="1"
Foreground="{Binding Enabled, Converter={StaticResource enabledConverter}}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
Это дает две ошибки компилятора: ListBox
ContentListBox
и InitializeComponent()
не определены. Я подозреваю, что проблема как-то связана с тем, как класс разбивается на два partial
определения, а мое параметризовано, а сгенерированный код - нет. Как я могу обойти это?