我正在尝试显示另一行交替颜色的网格。最好的方法是将模板交替放在一起,以便能够改变整行。
为了确保没有误解我的意思是网格我的意思是网格,而不是数据网格,而不是网格视图,网格就像<Grid></Grid>
现在我发现的唯一可行的解决方案是使用我想要的适当数量的行创建一个网格,并在每行中放入另一个网格,其中包含1行和我需要的3列,并通过更改为每行复制粘贴背面的颜色。如您所见,这不是一个非常干净的解决方案。
所以我环顾四周,发现列表框可以有备用计数,在一个简单的触发器上它可以改变一切,这是完美的,直到我注意到高亮不能被禁用。您可以更改高亮笔刷,但它会覆盖备用颜色,因此两者都不能同时使用。在你问之前我确实使用了透明布什并且透明不是真正透明的,它所做的就是它显示了ListBox控件下面的颜色,它是下面画布的米色,而项目本身就消失了。
任何人都知道在网格上应用交替行模板的方法。在RowDefinition
上添加一个简单的样式会很容易,但由于你无法真正告诉你在网格中放置元素的类型,我怀疑有什么东西可以做到这么简单。
编辑: 这是我最新的变化。有点“干净” 我为每个颜色主题创建了2个样式控件样式,如
<Style x:Key="PropertyGrid" TargetType="ItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="2"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="AlternatePropertyGrid" TargetType="ItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<Grid Background="#FFEBEBEB">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="2"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
然后我使用了堆栈面板并列出了每一行
<StackPanel>
<ItemsControl Style="{StaticResource PropertyGrid}">
<Label Content="Identifier" Style="{StaticResource PropertyNameLabel}"/>
<Label Content="{Binding ElementName=cboActions, Path=SelectedItem.UniqueIdentifier}" Style="{StaticResource PropertyValueLabel}"/>
<Rectangle Style="{StaticResource PropertyGridSplitter}"/>
</ItemsControl>
<ItemsControl Style="{StaticResource AlternatePropertyGrid}">
<Label Content="Source" Style="{StaticResource AlternatePropertyNameLabel}"/>
<Label Name="lblSource" Style="{StaticResource AlternatePropertyValueLabel}"/>
<Rectangle Style="{StaticResource AlternatePropertyGridSplitter}"/>
</ItemsControl>
<ItemsControl Style="{StaticResource PropertyGrid}">
<Label Content="Description" Style="{StaticResource PropertyNameLabel}"/>
<Label Name="lblActionDescription" Style="{StaticResource PropertyValueLabel}"/>
<Rectangle Style="{StaticResource PropertyGridSplitter}"/>
</ItemsControl>
</StackPanel>
每个项目在各自的样式中都有网格列预设,因此样式确定项目控件中每个对象的网格中的位置。
它有效,但我觉得可能有更有效的方法来做到这一点。这里是它现在的样子截图,可能对视觉人更有帮助,让我知道我想在这里实现什么。
答案 0 :(得分:0)
使用Datagrid,您可以轻松地执行此操作:
<DataGrid AlternatingRowBackground="Blue"/>
使用网格,不知道:p
答案 1 :(得分:0)
对于Grid中的列表框,我们使用一些代码行设置备用颜色(代码隐藏)。
private void SetAlternateColor()
{
var blueBrush = new SolidColorBrush(Colors.Blue);
var redBrush = new SolidColorBrush(Colors.Red);
for (int i = 0; i < Items.Count; i++)
{
ListBoxItem item = TestListBox.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
item.Background = i % 2 == 0 ? blueBrush : redBrush;
}
}
private void TestGrid_Loaded(object sender, RoutedEventArgs e)
{
SetAlternateColor();
}
不知道这是不是你想要的。
答案 2 :(得分:-1)
重复代码是最快的解决方案。