Datagrid复选框样式

时间:2010-09-28 17:42:22

标签: wpf datagrid checkbox styles

您好 首先抱歉我的英语。 我最近开始了第一个关于wpf的项目。我正在设计一个以编程方式定义的自定义DataGrid(xaml代码不存在)。 我已经在我的数据网格控件中设置了我需要的所有内容,除了我包装的复选框。 问题是在我的应用程序的其他地方我定义了一个复选框样式如何正确应用但我不能在我的数据网格中应用。 实际上我的datagrid没有抛出语法错误,但是当datagrid运行时,复选框样式不适用。 样式代码看起来像这样(在样式表中定义)

... <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>...

与它在apliccation中的应用完全相同。 我已经阅读了很多关于它但我无法应用它,我也试过,将setter属性设置为“DatagridBoundColum.ElementStyle”以及“CellStyle”但它不起作用。 任何建议? 非常感谢。

3 个答案:

答案 0 :(得分:-1)

就像你在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
                              }
                         );

答案 1 :(得分:-1)

感谢您的回复vorrtex。

我没有完全应用它,但它帮助我找到了解决方案,但我不想修改VB代码,只修改xaml样式标记。

我找到一个对象如何简化这项任务。语法如下:

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

它在datagrid中应用样式ok。但实际上它位于细胞的左边界。我会试着找出原因。

再次感谢。

答案 2 :(得分:-1)

你可以试试这个

<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>