Подсветка строк SelectedItem в DataGrid - PullRequest
2 голосов
/ 09 сентября 2011

Я пытаюсь ScrollIntoView DataGrid и выделите конкретную строку и столбец другим цветом.ScrollIntoView работает в прыжке в нужное место.Основной момент не делает.Вот то, что я использую, чтобы перейти к позиции:

    public void ShowSelection(int row, int column)
    {
        dtGridReads.SelectedItem = dtGridReads.Items[row];
        dtGridReads.SelectedItem = dtGridReads.Columns[column];
        dtGridReads.UpdateLayout();
        dtGridReads.ScrollIntoView(dtGridReads.Items[row], dtGridReads.Columns[column]);
    }

Вот моя таблица данных WPF:

<DataGrid x:Name="dtGridReads"  AutoGenerateColumns="False" 
            VirtualizingStackPanel.IsVirtualizing="True"                                       
            VirtualizingStackPanel.VirtualizationMode ="Standard" 
              EnableColumnVirtualization="True"
              EnableRowVirtualization="True"
            ScrollViewer.IsDeferredScrollingEnabled="True"
            CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True"
             ItemsSource ="{Binding}" Block.TextAlignment="Center"
             CanUserAddRows="False" CanUserDeleteRows="False" FrozenColumnCount="1"
               GridLinesVisibility="None" Style="{StaticResource DataGridStyle_Blue}"     ScrollViewer.ScrollChanged="dtGridReads_ScrollChanged">
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
                        <Setter Property="Background" Value="Red" />
                    </DataTrigger >
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>

Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Как выглядит ваш ItemsSource для этого?

Ваш триггер пытается привязать свойство IsSelected базового объекта для каждого объекта DataGridRow, поэтому, если у этого объекта нет этого свойства, вы не получите никаких результатов.Установка SelectedItem в DataGrid не повлияет на ваш триггер, как написано выше.

РЕДАКТИРОВАТЬ: Я собрал быстрый образец для тестирования.Как и ожидалось, вы пытаетесь связать не ту вещь (похоже, что у вас неправильная цель, если цель состоит в том, чтобы выделить определенную ячейку красным цветом)..RowStyle блок с этим, он будет работать как положено:

        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Style.Triggers>
                    <Trigger Property="DataGridCell.IsSelected" Value="True">
                        <Setter Property="Background" Value="Red" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>
0 голосов
/ 22 марта 2019

Это также можно сделать, используя собственные свойства DataGrid, такие как DataGridRow.IsSelected или DataGridCell.IsSelected

Строка

<Style TargetType="{x:Type DataGridRow}" x:Key="RowCustomStyle">
                <Style.Triggers>
                    <Trigger Property="DataGridRow.IsSelected" Value="True">
                <Setter Property="Background" Value="Red" />
            </Trigger>
                </Style.Triggers>
            </Style>

Столбец

<Style TargetType="{x:Type DataGridRow}" x:Key="RowCustomStyle">
                <Style.Triggers>
                    <Trigger Property="DataGridCell.IsSelected" Value="True">
                <Setter Property="Background" Value="Red" />
            </Trigger>
                </Style.Triggers>
            </Style>

Теперь вам нужнорасскажите вашей сетке данных о стиле и о выбранном элементе

<DataGrid  ItemsSource="{Binding Path=ItemsSource, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" SelectionMode="Single" 
                         RowStyle="{StaticResource RowCustomStyle}"  SelectedItem="{Binding Path=SelectedItem}">

Теперь в вашем ModelView должно быть свойство с именем SelectedItem, которое содержит объект в сетке данных, который вы хотите выбрать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...