XAML-通过TextBlock提供内容后,按钮内容消失了(DataGrid的最后一行除外)

问题描述 投票:0回答:1

我将按钮内容用作<Setter Property="Content" Value="Accept">

直到那时一切都还好

但是,我必须为该内容放置一个TextBlock,因为我希望在按钮内容中包含CharacterEllipsis。

此后按钮的内容消失

奇怪的是,除最后一行外,所有行都消失了。所有行的按钮代码都相同。由于我正在使用

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
        <--code for this column of every row-->
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

这是代码段和屏幕截图

            <DataGrid.Columns>
            <!--Item Desc column-->
            <DataGridTemplateColumn  Width="1.5*" CanUserResize="False" CanUserSort="False" 
            IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical" Margin="20 0 0 0">
                            <Label Style="{StaticResource supplyCabinetColumnHeaderStyle}">
                                <Label.Content>
                                    <TextBlock Text="Description" TextTrimming="CharacterEllipsis"/>
                                </Label.Content>
                            </Label>
                            <TextBlock Text="{Binding ItemDescription}" Margin="5 6 0 0" Style="{StaticResource supplyCabinetReadOnlyDataStyle}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <!--Button Column-->
            <DataGridTemplateColumn Width="0.7*" CanUserResize="False" CanUserSort="False" IsReadOnly="True" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button  Height="25" FontSize="12" FontFamily="Arial" 
                                                    HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0 25 10 4" Padding="10 5 10 5">
                            <Button.Style>
                                <Style TargetType="Button">
                                    <Setter Property="Content">
                                        <Setter.Value>
                                            <TextBlock Text="Accept" TextTrimming="CharacterEllipsis"/>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="Background" Value="#DFE0E2" />
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="Button">
                                                <Border CornerRadius="4" Background="{TemplateBinding Background}" BorderThickness="0.5" BorderBrush="Gray">
                                                    <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" 
                                                                                      Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                                                      Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                                </Border>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </Button.Style>
                        </Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>

Button Content Issue

wpf xaml datagrid controltemplate
1个回答
0
投票

<TextBlock Text="Accept" TextTrimming="CharacterEllipsis"/>包含在按钮的模板中,而不是ContentPresenter。设置器对每个按钮仅使用一个TextBlock实例。但是TextBlock是FrameworkElement,并且不能具有多个Parent(不能在多个位置显示)。如果将其移至模板,则每个Button将获得其自己的TextBlock实例。

<Button.Style>
    <Style TargetType="Button">
        <Setter Property="Content" Value="Accept">
        <Setter Property="Background" Value="#DFE0E2" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border CornerRadius="4" Background="{TemplateBinding Background}" BorderThickness="0.5" BorderBrush="Gray">
                        <TextBlock Text="{TemplateBinding Content}"
                                   TextTrimming="CharacterEllipsis" 
                                   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                   Margin="{TemplateBinding Padding}"
                                   VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Button.Style>
© www.soinside.com 2019 - 2024. All rights reserved.