【问题标题】:Silverlight: Align button controls to right inside Datagrid cellSilverlight:将按钮控件与 Datagrid 单元格内的右侧对齐
【发布时间】:2016-09-09 21:04:28
【问题描述】:

我已经尝试了一段时间。我只是被卡住了,无法通过它。

datagrid 单元格中有三个控件。

1:超链接按钮 2:清除按钮 3:一个搜索按钮

我需要做的是将“清除”和“打开按钮”对齐到列的右侧。问题是该列是可调整大小的。 我尝试为超链接按钮设置一个固定宽度,它看起来不错,但在调整列大小时会变得混乱。

单元格内容具有以下样式。

<Style TargetType="controls:HyperlinkClear">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="controls:HyperlinkClear">
                    <Border  BorderThickness="0" Margin="2" BorderBrush="Transparent">
                        <Border.Resources>
                            <Style x:Name="buttonStyle"
                                   TargetType="Button">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="Button">
                                            <Grid Width="12"
                                                  Height="12">
                                                <TextBlock  Margin="{TemplateBinding Margin}" Text="x"></TextBlock>
                                            </Grid>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Border.Resources>
                        <controlsToolkit:DockPanel Background="Transparent">
                            <Button Margin="-2,0,0,0" controlsToolkit:DockPanel.Dock="Right" HorizontalAlignment="Right" x:Name="MainSearchButton" Style="{StaticResource ButtonStyle}"  IsTabStop="False"
                                    Visibility ="{Binding IsRemoveButtonEnabled,Converter={StaticResource BoolToVisibilityConverter},Mode=TwoWay}">
                                <Image Source="./open.png"  Height="14" Width="16" VerticalAlignment="Center"/>
                            </Button>
                            <Button controlsToolkit:DockPanel.Dock="Right" Cursor="hand" 
                                    Margin="3,-2,0,0" Visibility ="{Binding IsRemoveButtonEnabled,Converter={StaticResource BoolToVisibilityConverter},Mode=TwoWay}"
                                    x:Name="RemoveItemButton" HorizontalAlignment="Right"
                                    Style="{StaticResource buttonStyle}" IsTabStop="false"/>

                            <HyperlinkButton x:Name="HyperlinkButton"  Style="{StaticResource HyperlinkButtonStyle}" Content="{TemplateBinding Content}" />
                        </controlsToolkit:DockPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

目前它看起来像这样。

预期

【问题讨论】:

  • 用第一列* 大小将你的DockPanel 换成网格,并将右边的两个设置为Auto,你就完成了。
  • 我尝试使用 Grid 并设置列定义。它的行为相同。没看出有什么区别。我错过了什么吗?

标签: c# wpf xaml silverlight componentone


【解决方案1】:

我找到了解决方案。解决方法是将单元格内容的水平对齐方式设置为“Stretch”。

覆盖列的 BindCellContent 方法。

public override void BindCellContent(FrameworkElement cellContent, DataGridRow row)
{
var hyperlinkButton = (HyperlinkClear)cellContent;
hyperlinkButton.HorizontalAlignment = HorizontalAlignment.Stretch;
}

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2021-12-20
    • 2022-01-02
    相关资源
    最近更新 更多