gpt4 book ai didi

wpf - 如何在 WPF ListView 中将 ItemTemplateSelector 与 HeaderTemplate 一起使用?

转载 作者:行者123 更新时间:2023-12-02 12:19:55 25 4
gpt4 key购买 nike

假设以下 XAML 定义的窗口:

<Window x:Class="LayoutTests.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:LayoutTests"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="XmlData" IsInitialLoadEnabled="True">
<x:XData>
<Items xmlns="">
<Item text="Item 1" type="A" />
<Item text="Item 2" type="B" />
<Item text="Item 3" type="A" />
</Items>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="TypeATemplate">
<TextBlock Text="{Binding XPath=./@text}" Foreground="Red"/>
</DataTemplate>
<DataTemplate x:Key="TypeBTemplate">
<TextBlock Text="{Binding XPath=./@text}" Foreground="Green"/>
</DataTemplate>
<DataTemplate x:Key="HeaderTemplate">
<TextBlock Text="A Header"/>
</DataTemplate>
<local:TypeSelector x:Key="TypeSelector" TypeATemplate="{StaticResource TypeATemplate}" TypeBTemplate="{StaticResource TypeBTemplate}"/>
</Window.Resources>
<Grid>
<ListView ItemsSource="{Binding Source={StaticResource XmlData}, XPath='/Items/Item'}" ItemTemplateSelector="{StaticResource TypeSelector}">
<!--<ListView.View>
<GridView>
<GridViewColumn Width="Auto" HeaderTemplate="{StaticResource HeaderTemplate}"/>
</GridView>
</ListView.View>-->
</ListView>
</Grid>
</Window>

并且在后面的代码中定义了一个DataTemplateSelector,如下所示:

  public class TypeSelector : DataTemplateSelector
{
public DataTemplate TypeATemplate { get; set; }
public DataTemplate TypeBTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var element = item as XmlElement;
if (element.Attributes["type"].Value == "A")
return TypeATemplate;
else
return TypeBTemplate;
}
}

如果标题模板的代码没有被注释掉,则不再调用 DataTypeSelector。 如何同时指定 DataTemplateSelectorHeaderTemplate

最佳答案

我认为您想要做的是设置单个 GridViewColumn 及其标题的样式。因此,将 TemplateSelector 从 ListView 移动到 GridViewColumn 定义:

<Grid>
<ListView ItemsSource="{Binding Source={StaticResource XmlData}, XPath='/Items/Item'}">
<ListView.View>
<GridView>
<GridViewColumn Width="Auto" CellTemplateSelector="{StaticResource TypeSelector}" HeaderTemplate="{StaticResource HeaderTemplate}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>

关于wpf - 如何在 WPF ListView 中将 ItemTemplateSelector 与 HeaderTemplate 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10010351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com