Я пытаюсь отобразить Сетка с чередующимся цветом друг друга. Лучше всего будет чередовать шаблон вместе, чтобы иметь возможность изменять всю строку.Сетка альтернативного цвета
Для того, чтобы убедиться, что нет никаких недоразумений, когда я имею в виду сетки я имею в виду сетки, не DataGrid, не GridView, сетка, как в <Grid></Grid>
Сейчас единственное жизнеспособное решение я нашел в том, чтобы сделать сетку с соответствующей количество строк, которые я хочу, и в каждой строке я помещаю еще одну сетку с 1 строкой и 3 столбцами, которые мне нужны, и скопируйте их для каждой строки, изменив задний цвет. Как вы можете видеть, это не очень чистое решение.
Итак, я осмотрел и обнаружил, что список может иметь альтернативный счет, а на простом триггере он может изменить все, и это было идеально, пока я не заметил, что подсветка НЕ МОЖЕТ быть отключена. Вы можете изменить выделенную кисть, но она переопределяет альтернативный цвет, поэтому оба они не могут использоваться одновременно. Прежде чем вы спросите «да», я использовал прозрачный куст, а прозрачность НЕ действительно прозрачна. Все, что он делает, это то, что он отображает цвет под элементом управления ListBox, который был бежевым цветом холста под ним, и сам элемент исчезает.
Кто-нибудь знает способ применения шаблона чередующейся строки на сетке. Положить простой стиль на RowDefinition
было бы легко, но поскольку вы не можете сказать тип элемента, который вы помещаете в сетку, я сомневаюсь, что есть что-то, что можно сделать так просто.
EDIT: здесь мое последнее изменение. немного «чище» я создал 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>
каждый элемент в их соответствующем стиле они иметь предустановленный столбец сетки, так что стиль определяет местоположение в сетке каждого объекта в элементе управления элемента.
Это работает, но все же я чувствую, что есть, вероятно, более эффективный способ сделать это. вот скриншот того, как он выглядит сейчас, может быть более полезным для визуальных людей узнать, чего я пытаюсь достичь здесь.
Почему бы не расширить элемент управления и добавить DependencyProperties, который сделает это за вас? – Kcvin
Возможно, но мне все равно придется создавать расширенный элемент управления для каждого стиля, который я планирую использовать. Но на самом деле это сделает очиститель XAML. – Franck