.net 泛型可以与Silverlight一起使用吗?
我有一个用户控件,它显示具有特定行为的客户端声明类型的对象。我想使用泛型。但是,我不确定如何在XAML中声明:.net 泛型可以与Silverlight一起使用吗?,.net,silverlight,generics,.net,Silverlight,Generics,我有一个用户控件,它显示具有特定行为的客户端声明类型的对象。我想使用泛型。但是,我不确定如何在XAML中声明: <local:EditableListBox x:Name="SectionList" Margin="56,8,15,0" FontSize="64" SelectionChanged="SectionList_SelectionChanged" /> XAML: <Grid x:Name="LayoutRoot"> <ListBox x:Na
<local:EditableListBox x:Name="SectionList" Margin="56,8,15,0" FontSize="64" SelectionChanged="SectionList_SelectionChanged" />
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()
未定义。我怀疑这个问题与如何将类拆分为两个部分定义有关,而我的定义是参数化的,而生成的代码不是。我该如何解决这个问题?您可以在代码隐藏中使用泛型。在XAML中没有这么多。很抱歉我认为,您几乎必须在代码隐藏中生成XAML或创建控件(等等)
[澄清]
我的意思是,在后面的代码中,您可以像预期的那样使用泛型。制作T的列表
,制作索引
,等等
您可以使用XamlReader和XamlWriter动态生成XAML。我不确定Silverlight。但是post提供了另一种方法的链接。在XAML中无法使用泛型,但它们可以在Silverlight项目的C#代码中使用。如果能够,您可以使用指定的类型从泛型类型创建派生类型,然后在XAML中创建该派生类型。否您不能直接在Silverlight XAML中使用泛型类型
但是你可以让自己熟悉一下。您的模型和viewmodels可以很容易地成为泛型类型,您可以在那里进行所有编码。XAML视图是哑的,没有或很少有代码隐藏,并且只绑定到视图模型。显然不是现成的。请看can-i-specify-a-generic-type-in-XAML需要在XAML中声明的任何内容都不能有泛型参数。我建议不要在从控件派生的任何东西上尝试泛型,但可以在代码中创建泛型。没有办法在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>