相关疑难解决方法(0)

对WPF项目控件中的最后一项使用不同的模板

我在itemscontrol中使用自定义模板来显示以下结果:

item 1, item 2, item3,
Run Code Online (Sandbox Code Playgroud)

我想更改最后一项的模板,结果变为:

item 1, item2, item3
Run Code Online (Sandbox Code Playgroud)

ItemsControl:

<ItemsControl ItemsSource="{Binding Path=MyCollection}">

    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <ItemsControl.ItemTemplate>
        <DataTemplate>

            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}"/>
                <TextBlock Text=", "/>
            </StackPanel>

        </DataTemplate>
    </ItemsControl.ItemTemplate>

</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

有没有人可以为我的问题提供解决方案?谢谢!

wpf templates itemscontrol

20
推荐指数
3
解决办法
2万
查看次数

ListView中第一个和最后一个项目的不同项目模板

我需要以不同方式设置列表视图的第一个和最后一个项目的样式.为此,我开始基于该答案开发解决方案:在WPF项目控件中为最后一项使用不同的模板

基本上,我有一个自定义的ItemsTemplateSelector,它根据列表视图项中的项索引决定要应用的模板(下面的代码).

它正常工作,除了当列表更新(添加或删除项目)时,模板不会再次被选中(例如,最初,SingleItemTemplate被选中,因为有一个项目.当我添加一个项目到列表,第一项的模板没有切换到FirstItemTemplate).如何强制所有项目的模板选择?

public class FirstLastTemplateSelector : DataTemplateSelector 
{
    public DataTemplate DefaultTemplate { get; set; }
    public DataTemplate FirstItemTemplate { get; set; }
    public DataTemplate LastItemTemplate { get; set; }
    public DataTemplate SingleItemTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        ListView lv = VisualTreeHelperEx.FindParentOfType<ListView>(container);
        if (lv != null)
        {
            if (lv.Items.Count == 1)
            {
                return SingleItemTemplate;
            }

            int i = lv.Items.IndexOf(item);
            if (i == 0)
            {
                return FirstItemTemplate;
            }
            else if (i == lv.Items.Count …
Run Code Online (Sandbox Code Playgroud)

wpf listview datatemplate

10
推荐指数
1
解决办法
1万
查看次数

用于 ListView 的 DataTemplate 中的行分隔符

我有 ItemsControl,每个项目都有可绑定的 itemsource 和自定义 datetemplate。项目由行分隔。但是最后一项也有分隔符,这就是我的问题,如何不为最后一项渲染行。我找到了这个解决方案,但它在 WPF 中有效:

如何在 ItemsControl 中的项目之间添加分隔符

编辑: 这是我的模板:

<ItemsControl Grid.Row="1"  ItemsSource="{x:Bind ViewModel.AvailableStatuses}" x:Name="Statuses">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Vertical" Padding="60,0,60,12"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid Background="Transparent">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <i:Interaction.Behaviors>
                                    <core:EventTriggerBehavior EventName="Tapped">
                                        <core:InvokeCommandAction Command="{Binding ElementName=ContentGrid, Path=DataContext.ChangeStatusCommand}" CommandParameter="{Binding}"/>
                                    </core:EventTriggerBehavior>
                                </i:Interaction.Behaviors>
                                <Rectangle StrokeThickness="0.4" Height="0.4" x:Name="Separator" 
                                   VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Stroke="#D1D3D4" />
                                <StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Stretch">
                                    <Image Source="{Binding Converter={StaticResource SelectContactStatusConverter}}" Margin="0,8,12,8"/>
                                    <TextBlock Text="{Binding Converter={StaticResource EnumContactStatusToTextConverter}}" FontSize="20" VerticalAlignment="Center" Foreground="Black"/>
                                </StackPanel>
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
Run Code Online (Sandbox Code Playgroud)

xaml windows-runtime winrt-xaml uwp uwp-xaml

2
推荐指数
1
解决办法
3194
查看次数

我怎么知道ListBoxItem是否是Wpf的ListBox中的最后一项?

我怎么知道a ListBoxItem是否是Wpf中集合的最后一项(在模板中ItemContainerStyleItemContainer模板中)ListBox

那个问题是因为我需要知道一个项目是否是以其他方式显示它的最后一个项目.例如:假设我想显示以分号分隔的项目,但最后一项:a; b; c

使用ccs选择器在html和ccs中很容易做到这一点.但是,我怎么能在Wpf中做到这一点?

c# wpf listbox listboxitem

1
推荐指数
1
解决办法
2634
查看次数