DataGridCheckBoxColumn теряет состояние IsReadOnly при применении ElementStyle

Мне нужно вертикальноDataGridCheckBoxColumn, Так как я не нашел недвижимость внутриDataGridCheckBoxColumnЯ применилElementStyle, Однако, когда этот стиль применяется, мойCheckBox становится проверяемым снова, хотя установленоReadOnly в моемDataGrid (целыйDatagrid являетсяReadOnly), И вDataGridCheckBoxColumn сам.

Как я могу создать вертикально по центруCheckBox это сохраняет егоReadOnly государство? Вот мой код:

<DataGrid IsReadOnly="True">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Test" IsReadOnly="True" Binding="{Binding MyBinding}">                        
            <DataGridCheckBoxColumn.ElementStyle>
                <Style>
                    <Setter Property="FrameworkElement.Margin" Value="0,1,0,0" />
                    <Setter Property="FrameworkElement.VerticalAlignment" Value="Center" />
                    <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center" />                                
                </Style>
            </DataGridCheckBoxColumn.ElementStyle>
        </DataGridCheckBoxColumn>
    </DataGrid.Columns>
</DataGrid>

Ответы на вопрос(2)

Решение Вопроса

Когда вы установитеElementStyle наDataGridCheckBoxColumn Вы должны включитьFrameworkElement.IsHitTestVisible="False" на вашStyle:

<Setter Property="FrameworkElement.IsHitTestVisible" Value="False"/>

Также, если вы добавитеTargetType="CheckBox" кStyle тогда вам не нужно повторятьFrameworkElement для каждогоSetter больше:

<DataGridCheckBoxColumn.ElementStyle>
    <Style TargetType="CheckBox">
        <Setter Property="Margin" Value="0,1,0,0" />
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="HorizontalAlignment" Value="Center" />
        <Setter Property="IsHitTestVisible" Value="False"/>
    </Style>
</DataGridCheckBoxColumn.ElementStyle>
 Scroog111 мая 2017 г., 14:18
Вы, вероятно, должны также установитьFocusable вFalse, поэтому не может редактировать его с клавиатуры.
 Erik03 июн. 2016 г., 07:26
Спасибо, это работает, но я до сих пор не понимаю, зачем это вообще нужно. Должно ли изменение стиля действительно привести к потере свойства readonly?

что это ошибка (так как это не происходит в других типах столбцов).

Чтобы обойти это, все, что вам нужно сделать, это убедиться, что вы основываете свой стиль на стиле по умолчанию; добавляяBasedOn="{x:Static DataGridCheckBoxColumn.DefaultElementStyle}" кStyle элемент:

<DataGrid IsReadOnly="True">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Test" IsReadOnly="True" Binding="{Binding MyBinding}">
            <DataGridCheckBoxColumn.ElementStyle>
                <Style BasedOn="{x:Static DataGridCheckBoxColumn.DefaultElementStyle}">
                    <Setter Property="FrameworkElement.Margin" Value="0,1,0,0" />
                    <Setter Property="FrameworkElement.VerticalAlignment" Value="Center" />
                    <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center" />
                </Style>
            </DataGridCheckBoxColumn.ElementStyle>
        </DataGridCheckBoxColumn>
    </DataGrid.Columns>
</DataGrid>

Преимущество этого подхода заключается в том, что вам не нужно делать много работы, если вы собираетесь изменитьDataGrid.IsReadOnly собственность во время выполнения.

Ваш ответ на вопрос