Стили WPF, убрать выделение в ListBox и сделать на всю ширину

Здравствуйте.
Есть такая задача на стилизацию.
На скрине есть два компонента.
Сверху ListControl со своими стилями и снизу ListView с простыми стилями.
image

То что сверху при связывании с реальными данными жрет памяти 10 гигов и виснет на рендеринг минут на 10 при размераз коллекций свыше 10 000.
А цель отобразить свыше 500 000.

ListView отображает все за секунду или меньше. Но он не вытягивает Border до границ и видно выделение.
Задача выделение не отображать и вытянуть до конца контрола.
Курил гугл, но почему то предложенные методы не помогают.

        <ListBox x:Name="rList" Grid.Row="2" Background="AliceBlue" HorizontalAlignment="Stretch">
                    <ListBox.Resources>  // ЭТО БЫЛО НА ОДНОМ РЕСУРСЕ ДЛЯ СПРЯТЫВАНИЯ ВЫДЕЛЕНИЯ НЕ РАБОТАЕТ
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
                        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
                    </ListBox.Resources>
                    <ListBox.ItemContainerStyle> // ЭТО БЫЛО НА ДРУГОМ РЕСУРСЕ   НЕ РАБОТАЕТ
                        <Style TargetType="ListBoxItem">
                            <Setter Property="Focusable" Value="false"/>
                        </Style>
                    </ListBox.ItemContainerStyle>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Border Name="brd" Visibility="{Binding Path=Item.Visible}" HorizontalAlignment="Stretch" Background="{Binding BackColor}" Tag="{Binding}" BorderBrush="{StaticResource ControlBordersBrush}" BorderThickness="1" Margin="1" PreviewMouseDown="OnPreviewMouseDown">
                                <Grid Margin="2" HorizontalAlignment="Stretch">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="auto"/>
                                        <ColumnDefinition Width="1"/>
                                        <ColumnDefinition Width="99*"/>
                                    </Grid.ColumnDefinitions>
                                    <!--<CheckBox Name="_chbx" Margin="5,0,0,0" IsChecked="{Binding Path=IsChecked, Mode=Default, UpdateSourceTrigger=PropertyChanged}"  VerticalAlignment="Center" HorizontalAlignment="Center"/>-->
                                    <TextBlock Margin="1,0,3,0" Text="{Binding Path= Item.SortIndex}" FontWeight="Bold" HorizontalAlignment="Center"/>
                                    <Border Grid.Column="1" Width="1"  BorderBrush="{StaticResource ControlBordersBrush}" BorderThickness="1"/>
                                    <TextBlock Grid.Column="2" Margin="3,0,0,0" TextAlignment="Left" TextWrapping="Wrap" Text="{Binding Path=Item.FormattedString}"/>
                                </Grid>
                            </Border>
                        </DataTemplate>

                    </ListBox.ItemTemplate>
                </ListBox>
HorizontalContentAlignment="Stretch"

хм, это не дает применить выделение (клик), но при наведении показывает :thinking:

Можно IsHitTestVisible если не надо вообще взаимодействовать с ними.

<Window x:Class="WpfApp6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ListView x:Name="listView" HorizontalContentAlignment="Stretch" Height="360" Margin="15" Width="413">
            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="IsHitTestVisible" Value="False" />
                </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Name="brd" Visibility="{Binding Path=Item.Visible}" Background="{Binding BackColor}" Tag="{Binding}" BorderBrush="Black" BorderThickness="1" Margin="1">
                        <Grid Margin="2">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="1"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Margin="1,0,3,0" Text="42" FontWeight="Bold"/>
                            <Border Grid.Column="1" Width="1"  BorderBrush="Black" BorderThickness="1"/>
                            <TextBlock Grid.Column="2" Margin="3,0,0,0" TextAlignment="Left" TextWrapping="Wrap" Text="{Binding }"/>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListView>
    </Grid>
</Window>
using System.Linq;
using System.Windows;

namespace WpfApp6
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            listView.ItemsSource = Enumerable.Range(1, 1000);
        }
    }
}

Взаимодействовать то нужно. Там элементы типа CheckBox. При щелчке меняют свой внешний вид и параметр Checktd/ Если запретить этот флаг то контрол полностью терает взаимодействие. По сути бы просто цвета прозрачныи сделать…

Content … Точно же … ))

Так вроде бы работает https://stackoverflow.com/a/16491211

            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="Background" Value="Transparent" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListViewItem}">
                                <ContentPresenter />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListView.ItemContainerStyle>
<Window x:Class="WpfApp6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ListView x:Name="listView" HorizontalContentAlignment="Stretch" Height="360" Margin="15" Width="413">
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="Background" Value="Transparent" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListViewItem}">
                                <ContentPresenter />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListView.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Name="brd" Visibility="{Binding Path=Item.Visible}" Background="{Binding BackColor}" Tag="{Binding}" BorderBrush="Black" BorderThickness="1" Margin="1">
                        <Grid Margin="2">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="1"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <CheckBox Margin="1,0,3,0" Content="42" FontWeight="Bold"/>
                            <Border Grid.Column="1" Width="1"  BorderBrush="Black" BorderThickness="1"/>
                            <TextBlock Grid.Column="2" Margin="3,0,0,0" TextAlignment="Left" TextWrapping="Wrap" Text="{Binding }"/>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListView>
    </Grid>
</Window>

Супер. Заработало. Спасибо.

А вообще почему такая дичь то с производительностью?? какой толк то в этой WPF если все так ужасно тормозит.

Вот в том же проекте с теми же данными нужно отобразить все в таблицу.
Использую DataGrid. Но опять же при 100 000 строк рендеринг занимает просто невероятное количество времени.

  <ScrollViewer VerticalScrollBarVisibility="Auto" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" >
                <DataGrid Name="MainGrid" Background="Transparent" CanUserAddRows="False" 
                          CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" 
                          IsReadOnly="True" RowHeaderWidth="0" SelectionUnit="Cell" SelectionMode="Single" 
                          AutoGeneratingColumn="MainGrid_AutoGeneratingColumn" 
                          AutoGeneratedColumns="MainGrid_AutoGeneratedColumns"
                          EnableColumnVirtualization="True"
                          EnableRowVirtualization="True"/>
            </ScrollViewer>

И виртуализацию сделал как советуют … Но все равно это дикий кошмар??
И сделать таблицу из ListBox я так понял никаким образом нельзя??
Пытаюсь ковырять вот этот мануал

Может знаете какое нибудь решение??

Может быть виртуализация не работает почему-то.

https://stackoverflow.com/a/52221943/964478

Virtualization only works if the grid is constrained in size.

If you place DataGrid inside ScrollViewer or StackPanel or any control that does not pass fix constraint to DataGrid it will break the virtualization in DataGrid.

https://stackoverflow.com/a/44807110/964478

The ScrollViewer.CanContentScroll value on the DataGrid element must be set to True in order for row virtualization to work properly. Here is an explanation of why it must be set this way.

Убрал скроллер … ничего не изменилось. (((

Тут наверно дело не только в скролле, но и в любом контейнере, который

А это не помогло?

В общем нашел вот такой результат:
Этот вариант действительно дает потрясающую производительность. 200 000 строк за секунду вылетают. но требуется дополнительно стили прописывать чтобы красота была.

Вот добавил стилей чуток. Правда сразу упала производительность, но терпимо.

<ItemsControl Name="MainGrid"  Grid.ColumnSpan="2"
                           ItemsSource="{Binding Items}"
                      ScrollViewer.HorizontalScrollBarVisibility="Auto"
                      ScrollViewer.VerticalScrollBarVisibility="Auto"
                      ScrollViewer.CanContentScroll="true"
                           HorizontalAlignment="Stretch"
                          HorizontalContentAlignment="Stretch"
                      ScrollViewer.PanningMode="Both">
                <ItemsControl.Template>
                    <ControlTemplate>
                        <ScrollViewer>
                            <ItemsPresenter/>
                        </ScrollViewer>
                    </ControlTemplate>
                </ItemsControl.Template>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ItemsControl ItemsSource="{Binding Cells}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border BorderBrush="Black" BorderThickness="0.5">
                                        <Label Content="{Binding Path=Content}" HorizontalContentAlignment="Center" Background="{Binding Path=CellBrush}"/>
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <UniformGrid Rows="1" HorizontalAlignment="Stretch"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                        </ItemsControl>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel VirtualizationMode="Recycling" IsVirtualizing="True"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>

Добавил везде растягивание но почему то не вмещает всю панель в форму.
Почему так??
image
Хотелось бы чтобы он съеживал таблицу по ширине формы.

И второе: Столбцы оформляются динамически и для них жестко не прописать ColumnDefinition.
Есть способ сформировать определения из кода но вот как достать UniformGrid из шаблона стиля?? Гугл какие то странные ответы предлагает.