Silverlight:将按钮控件与 Datagrid 单元格内的右侧对齐
Posted
技术标签:
【中文标题】Silverlight:将按钮控件与 Datagrid 单元格内的右侧对齐【英文标题】:Silverlight: Align button controls to right inside Datagrid cell 【发布时间】: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 并设置列定义。它的行为相同。没看出有什么区别。我错过了什么吗?
【参考方案1】:
我找到了解决方案。解决方法是将单元格内容的水平对齐方式设置为“Stretch”。
覆盖列的 BindCellContent 方法。
public override void BindCellContent(FrameworkElement cellContent, DataGridRow row)
var hyperlinkButton = (HyperlinkClear)cellContent;
hyperlinkButton.HorizontalAlignment = HorizontalAlignment.Stretch;
【讨论】:
以上是关于Silverlight:将按钮控件与 Datagrid 单元格内的右侧对齐的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Silverlight 中的 TextBox 上方定位菜单栏?
Silverlight:如何访问 DataGrid RowDetailTemplate 中的控件