C# TemplateSelector不';行不通
我有C# TemplateSelector不';行不通,c#,xaml,uwp,win-universal-app,windows-10-universal,C#,Xaml,Uwp,Win Universal App,Windows 10 Universal,我有项控件,但我想改进此代码,以便处理不同类型的输入数据 <Grid> <ItemsControl x:Name="control" VerticalAlignment="Center" HorizontalAlignment="Center" ItemsSource="{x:Bind ItemsSource, Mode=OneWay}" ItemTempla
项控件
,但我想改进此代码,以便处理不同类型的输入数据
<Grid>
<ItemsControl x:Name="control"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ItemsSource="{x:Bind ItemsSource, Mode=OneWay}"
ItemTemplate="{x:Bind CellTemplate, Mode=OneWay, Converter={StaticResource SimpleSelector}}">
<!--I want make like this-->
<ContentControl VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
ContentTemplate="{Binding SelectedCollageTemplate, Converter={StaticResource CollageTemplateSelector}}" />
<!-- -->
<!--now I have this-->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<controls:SimplePanel SelectedCollage="{Binding SelectedCollage, Mode=TwoWay}"
SelectedCollagePattern="{Binding SelectedCollagePattern}">
<controls:SimplePanel.Background>
<ImageBrush Stretch="Fill"
ImageSource="ms-appx:///Images/Background/5.jpg" />
</controls:SimplePanel.Background>
</controls:SimplePanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!-- -->
</ItemsControl>
</Grid>
并添加了DataTemplate
:
<DataTemplate x:Key="SimpleTemplate">
<controls:SimplePanel
SelectedCollage="{Binding SelectedCollage, Mode=TwoWay}"
SelectedCollagePattern="{Binding SelectedCollagePattern}">
<controls:SimplePanel.Background>
<ImageBrush Stretch="Fill"
ImageSource="ms-appx:///Images/Background/5.jpg" />
</controls:SimplePanel.Background>
</controls:SimplePanel>
我的转换器返回简单的面板。但是当我启动它时,我的SimplePanel
没有启动(我在构造函数上有断点),并且部分代码不起作用。我有什么问题
ContentControl
的ContentTemplate
设置为选择器;您应该改为设置ContentTemplateSelector
属性ItemsControl
中,您正在将ItemsTemplate
设置为类似于模板选择器的内容;您应该改为设置ItemsTemplateSelector
属性StaticResource
s访问它们DataTemplateSelector
的示例
首先,我使用以下ItemsSource
,目的是使字符串“Three”显示为红色:
public string[] ItemsSource => new[]
{
"One", "Two", "Three",
};
模板选择器有两个DataTemplate
属性,将从XAML设置它们——一个用于“三个”字符串;另一个用于所有其他字符串:
public sealed class ItemTemplateSelector : DataTemplateSelector
{
/// <summary>
/// This property is set in XAML.
/// </summary>
public DataTemplate NormalTemplate { get; set; }
/// <summary>
/// This property is set in XAML.
/// </summary>
public DataTemplate ThreeTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item)
{
if ("Three".Equals(item))
{
return ThreeTemplate;
}
return NormalTemplate;
}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
return SelectTemplateCore(item);
}
}
结果如下所示,字符串“三”显示为红色:
我希望这足以让您走上正确的道路。关于重写这两个
DataTemplateSelector
方法的警告确实有所帮助。是的,该页面提到了它,但不幸的是,其他描述如何编写自己的选择器的MS文档页面没有。。。
public sealed class ItemTemplateSelector : DataTemplateSelector
{
/// <summary>
/// This property is set in XAML.
/// </summary>
public DataTemplate NormalTemplate { get; set; }
/// <summary>
/// This property is set in XAML.
/// </summary>
public DataTemplate ThreeTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item)
{
if ("Three".Equals(item))
{
return ThreeTemplate;
}
return NormalTemplate;
}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
return SelectTemplateCore(item);
}
}
<Grid>
<Grid.Resources>
<local:ItemTemplateSelector x:Key="ItemTemplateSelector">
<local:ItemTemplateSelector.NormalTemplate>
<DataTemplate>
<TextBlock Foreground="Blue" Text="{Binding}" />
</DataTemplate>
</local:ItemTemplateSelector.NormalTemplate>
<local:ItemTemplateSelector.ThreeTemplate>
<DataTemplate>
<TextBlock Foreground="Red" Text="{Binding}" />
</DataTemplate>
</local:ItemTemplateSelector.ThreeTemplate>
</local:ItemTemplateSelector>
</Grid.Resources>
<ItemsControl
VerticalAlignment="Center"
HorizontalAlignment="Center"
ItemsSource="{x:Bind ItemsSource, Mode=OneWay}"
ItemTemplateSelector="{StaticResource ItemTemplateSelector}">
</ItemsControl>
</Grid>