Чекбокс Datagrid - PullRequest
       20

Чекбокс Datagrid

0 голосов
/ 28 сентября 2010

Здравствуйте, сначала извините за мой английский.Я недавно начал свой первый проект на wpf.Я оформляю пользовательский DataGrid, который был определен программно (код xaml не существует).Я добавил все, что мне нужно, в свой элемент управления сеткой данных, кроме флажка, который я обернул внутри.Проблема в том, что в другом месте моего приложения я определил стиль флажка, как правильно применять, но я не могу применить его в своей сетке данных.На самом деле моя сетка данных не генерирует синтаксические ошибки, но когда сетка данных запускается, стили флажков не применяются.Код стиля выглядит следующим образом (он определен в таблице стилей)

... <Setter Property="DataGridCheckBoxColumn.ElementStyle">
        <Setter.Value>
            <Style TargetType="{x:Type CheckBox}">

                <Setter Property="Background" Value="Yellow"/>
                <Setter Property="BorderBrush" Value="{DynamicResource NormalBorderBrush}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type CheckBox}">


                            <BulletDecorator Background="Transparent">
                                <BulletDecorator.Bullet>
                                    <Grid Width="13" Height="13">
                                        <Border x:Name="Border" Background="Pink" BorderBrush="Black" BorderThickness="1,1,1,1" CornerRadius="2,2,2,2"/>
                                        <Path x:Name="CheckMark" Stroke="Green" StrokeThickness="2" SnapsToDevicePixels="False" Data="M1.5000001,1.5833334 L9.7920001,9.6666667 M1.5420001,9.6666667 L9.7083333,1.5000001" Margin="1" ClipToBounds="False" StrokeEndLineCap="Round" StrokeStartLineCap="Round"/>
                                    </Grid>
                                </BulletDecorator.Bullet>
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/>
                            </BulletDecorator>

                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>

    </Setter>...

Он точно такой же, как и в приложении.Я много читал об этом, но я не могу применить его, я также пытался установить для свойства setter значение «DatagridBoundColum.ElementStyle», а также «CellStyle», но это не работает.Любой предложить?Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 29 сентября 2010

Спасибо за ваш ответ vorrtex.

Я не применил это точно, но это помогло мне найти решение, однако я хотел бы не изменять код VB, а только изменять его тегом стиля xaml.

Нахожу объект, как упростить эту задачу. Синтаксис следующий:

column2.ElementStyle = Application.Current.FindResource("CheckBoxStyle")

Это стиль применения хорошо внутри сетки данных. Но на самом деле это размещение на левой границе ячейки. Я постараюсь выяснить, почему.

Еще раз спасибо.

0 голосов
/ 08 февраля 2013

Вы можете попробовать это

<Controls:DataGridCheckBoxColumn Header="Homme"  Binding="{Binding Homme}">
                        <Controls:DataGridCheckBoxColumn.ElementStyle>
                            <Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
                                <Setter Property="Margin" Value="4,0,0,0"/>
                            </Style>
                        </Controls:DataGridCheckBoxColumn.ElementStyle>
                    </Controls:DataGridCheckBoxColumn>
0 голосов
/ 28 сентября 2010

Делайте так, как вы делаете в xaml:

<UserControl.Resources>
    <DataTemplate x:Key="CheckBoxTemplate">
        <CheckBox Style="{StaticResource AnyResourceKeyInApplciation}"/>
    </DataTemplate>
</UserControl.Resources>
<DataGrid x:Name="dataGrid" />
this.dataGrid.Columns.Add(new DataGridTemplateColumn
                              {
                                  CellTemplate = this.Resources["CheckBoxTemplate"] as DataTemplate
                              }
                         );
...