0

我的原始数据网格确实有几列,其中绑定值为 bool。[默认情况下,这将显示为复选框]

我已经定义了一个单元格模板并且可以创建

我想为此使用一个通用的数据网格控件模板,就像下面定义的那样。但是它并没有引入绑定值 - 它显示为空白。

有人可以帮我找出我做错了什么吗?

    <Style x:Key="dgCellBool" TargetType="{x:Type DataGridCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Ellipse>
                            <Ellipse.Height>10</Ellipse.Height>
                            <Ellipse.Width>10</Ellipse.Width>
                            <Ellipse.Style>
                                <Style TargetType="Ellipse">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Binding}" Value="True">
                                            <Setter Property="Fill" Value="Red"></Setter>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Binding}"  Value="False">
                                            <Setter Property="Fill" Value="Green"></Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Ellipse.Style>   
                        </Ellipse>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
    </Style>

谢谢拉杰什

4

2 回答 2

0

您需要提供一个ContentPresenter来呈现内容,并确保添加Border您将从原始内容中丢失的内容Template

<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" 
HorizontalAlignment="Center" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

更新>>>

如果你想要你的Ellipse而不是 a Border,只需用 a 重新添加它Grid...Ellipse对象不能有任何内容:

<Style x:Key="dgCellBool" TargetType="{x:Type DataGridCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid>
                    <Ellipse Height="10" Width="10">
                        <Ellipse.Style>
                            <Style TargetType="Ellipse">
                                <Setter Property="Fill" Value="Red" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding RelativeSource={
RelativeSource TemplatedParent}, Path=Binding}" Value="False">
                                        <Setter Property="Fill" Value="Green" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Ellipse.Style>
                    </Ellipse>
                    <ContentPresenter VerticalAlignment="Center" 
HorizontalAlignment="Center" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-08-20T15:37:31.710 回答
0

您正在尝试绑定 DataGridCell 的 Binding 属性,但 DataGridCell 没有任何 Binding 属性。Yoy 应该设置 Path=Column.Binding。DataGridCell 具有 Column 属性,该属性还具有 Binding 属性。

Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Column.Binding}" 

我希望这将有所帮助。

于 2013-08-20T15:30:52.007 回答