将按钮填充到数据网格单元格中

时间:2017-09-22 13:13:50

标签: wpf xaml

我有一个数据网格,对于列 HCode 我有/需要按钮,但属性 Code 可以为null / empty,在这种情况下Button不会可见。 我想知道是否有选项或为单元格定义鼠标单击处理程序是可行的方法。

下面是定义列

的DataGridTemplate
<DataGridTemplateColumn Header="HCode" MinWidth="120">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="{Binding Code}"
                                Style="{StaticResource BStyle}"
                                Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TextBlock}, Path=Background}"
                                Click="ButtonBase_OnClick"
                                HorizontalContentAlignment="Stretch"
                                VerticalContentAlignment="Center"
                                 />
                        <!--Visibility="{qc:Binding '$P != null &amp;&amp; $P.Length > 0 ? Visibility.Visible : Visibility.Collapsed', P={Binding Code}}"-->
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>

以下是使用的样式

                <Style x:Key="BStyle"
               TargetType="{x:Type Button}">
            <Setter Property="SnapsToDevicePixels"
                    Value="true" />
            <Setter Property="BorderThickness"
                    Value="0" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="120*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="30*"></RowDefinition>
                            </Grid.RowDefinitions>
                            <ContentPresenter Margin="0"
                                          HorizontalAlignment="Stretch"
                                          VerticalAlignment="Stretch"
                                          RecognizesAccessKey="True" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="Foreground"
                    Value="Blue" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver"
                         Value="true">
                    <Setter Property="Foreground"
                            Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>

1 个答案:

答案 0 :(得分:0)

您可以定义两个DataTriggers。试试这个:

<Button Content="{Binding Code}"
        Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TextBlock}, Path=Background}"
        Click="ButtonBase_OnClick"
        HorizontalContentAlignment="Stretch"
        VerticalContentAlignment="Center">
    <Button.Style>
        <Style TargetType="Button" BasedOn="{StaticResource BStyle}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Code}" Value="{x:Null}">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Code.Length}" Value="0">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

或者:

<DataTrigger Binding="{Binding Code.Length, FallbackValue=0}" Value="0">
    <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>