gpt4 book ai didi

wpf - 如何在 ItemsControls 中使用 AlternationIndex?

转载 作者:行者123 更新时间:2023-12-03 10:07:29 24 4
gpt4 key购买 nike

我看过一些展示如何使用 AlternationIndex 的文章。与 ListBox es 或 ListView s,但我花了几个小时试图在 ItemsControl 基础上获得交替的背景颜色类,似乎没有任何工作。全部 ListBox我看到的样本使用 ListBoxItem作为基于 AlternationIndex 设置背景的样式的目标类型- 喜欢 MSDN 中的这个:

<Grid>
<Grid.Resources>
<Style x:Key="alternatingWithTriggers" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
<Style.Triggers>
<Trigger Property="ListBox.AlternationIndex" Value="1">
<Setter Property="Background" Value="CornflowerBlue"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
<Trigger Property="ListBox.AlternationIndex" Value="2">
<Setter Property="Background" Value="LightBlue"/>
<Setter Property="Foreground" Value="Navy"/>
</Trigger>
</Style.Triggers>
</Style>

</Grid.Resources>
<ListBox AlternationCount="3" ItemsSource="{StaticResource data}"
ItemContainerStyle="{StaticResource alternatingWithTriggers}">
</ListBox>
</Grid>

我想使用 ItemsControl因为我不想要选择功能,我想重新设置 ListBox隐藏它可能不是最好的选择。

这是我正在尝试的事情之一:
<DataTemplate DataType="{x:Type vm:ObservableCollectionItem}">
<Grid>
<!-- some content here -->
</Grid>
</DataTemplate>

<!-- ... -->

<ItemsControl
ItemsSource="{Binding ObservableCollectionItems}"
AlternationCount="2"
>
<ItemsControl.ItemContainerStyle>
<Style>
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Grid.Background" Value="Red"></Setter>
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Grid.Background" Value="Blue"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>

我看到的问题是可视化树有一个列表 ContentPresenter具有 ItemsControl.AlternationIndex 的在 0 和 1 之间交替,但 Grid在每个 ContentPresenterItemsControl.AlternationIndex设置为 0。

可能有一些明显的东西我错过了......

最佳答案

我不知道任何先前的答案是合法的。我不能让他们中的任何一个工作(虽然没有尝试雅各比)。无论如何,我在这里找到了启蒙之路:http://www.dotnetcurry.com/wpf/1211/wpf-items-control-advanced-topic ,这导致我在 xaml.cs 代码隐藏中添加以下内容:

public sealed class CustomItemsControl : ItemsControl
{
protected override DependencyObject GetContainerForItemOverride()
{
return new ContentControl();
}
}

这在 xaml 本身中
    <local:CustomItemsControl AlternationCount="2" 
ItemsSource="{Binding Cells, Mode=OneWay}">
<local:CustomItemsControl.ItemContainerStyle>
<Style TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Border Background="{TemplateBinding Background}">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>

<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="WhiteSmoke"/>
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray"/>
</Trigger>
</Style.Triggers>
</Style>
</local:CustomItemsControl.ItemContainerStyle>
</local:CustomItemsControl>

很难找到一个可行的解决方案,我真的很生气

关于wpf - 如何在 ItemsControls 中使用 AlternationIndex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567778/

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