vix*_*xez 1 user-controls listbox datatemplate datatemplateselector uwp
我有一个列表框,我想在 UWP 应用程序中加载不同类型的用户控件。
我需要 UserControls 的原因是因为列表中显示的每个项目都需要代码隐藏,因此简单的 DataTemplate 无法解决它。
我收到一条错误消息
<converters:HomeWidgetControlPicker>
Run Code Online (Sandbox Code Playgroud)
在列表框中。
The specified value cannot be assigned. The following type was expected: "DependencyObject".
Run Code Online (Sandbox Code Playgroud)
如何加载 UserControl?我在旧的 UWP 应用程序中使用了此方法,并且它有效,但在我的新项目中却无效。
我无法使用 x:DataType 作为同一类 (HomeWidget) 的所有项目,但根据 HomeWidget 的 Type 属性,选择正确的 UserControl。
我做了一个 DataTemplateSelector:
public class HomeWidgetControlPicker : DataTemplateSelector
{
public DataTemplate Artist { get; set; }
public DataTemplate Release { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
if (item != null)
{
var result = (HomeWidget)item;
if (result.Type == "artist")
{
return Artist;
}
if (result.Type == "release")
{
return Release;
}
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个列表框,目前仅使用类型(HomeWidgetControlPicker.Artist),但更多内容将随之而来。
<ListBox x:Name="wrapGrid" ItemContainerStyle="{StaticResource WrapPanelBorderedItem}" ItemsSource="{x:Bind WidgetList}" Background="{x:Null}" ScrollViewer.VerticalScrollBarVisibility="Disabled" VerticalAlignment="Top" HorizontalAlignment="Center" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<userControls:WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<converters:HomeWidgetControlPicker>
<converters:HomeWidgetControlPicker.Artist>
<DataTemplate>
<homeItems:HomeArtist></homeItems:HomeArtist>
</DataTemplate>
</converters:HomeWidgetControlPicker.Artist>
</converters:HomeWidgetControlPicker>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
你使用的方法DataTemplateSelector应该是错误的。在您的代码片段中,DataTemplateSelector被放置为 的根元素 DataTemplate,但实际上,您可以使用 aDataTemplateSelector并设置属性,例如ItemTemplateSelector将其分配给数据视图。有关更多详细信息,请参阅课程备注部分。DataTemplateSelector
DataTemplateSelector 基类不用作 XAML 中的对象元素。但是,常见的情况是派生自定义 DataTemplateSelector、映射自定义类及其命名空间/程序集的 xmlns 前缀,然后引用 XAML 中的 Resources 块中定义的自定义类的实例。这使得可以通过 x:Key 引用自定义模板选择器类,并使用该引用来设置属性的值,例如 XAML 模板和视觉状态中的 ItemTemplateSelector。
例如:
<Page.Resources>
<DataTemplate x:Key="Artist" x:DataType="local:HomeWidget">
<Grid>
<local:UserControl1></local:UserControl1>
...
</Grid>
</DataTemplate>
<DataTemplate x:Key="Release" x:DataType="local:HomeWidget">
<Grid>
<local:UserControl2></local:UserControl2>
...
</Grid>
</DataTemplate>
<local:HomeWidgetControlPicker x:Key="HomeWidgetControlPicker" Artist="{StaticResource Artist}" Release="{StaticResource Release}">
</local:HomeWidgetControlPicker>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListBox x:Name="wrapGrid" ItemTemplateSelector="{StaticResource HomeWidgetControlPicker}" ItemsSource="{x:Bind WidgetList}"
...
</ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3531 次 |
| 最近记录: |