Silverlight:将按钮控件对齐到 Datagrid 单元格内的右侧
Silverlight: Align button controls to right inside Datagrid cell
我已经尝试了一段时间了。我只是卡住了,无法通过它。
数据网格单元格中有三个控件。
1:超链接按钮
2:清除按钮
3: 搜索按钮
我需要做的是将 "clear" 和 "open button" 对齐到列的右侧。要注意的是列是可以调整大小的。
我试着给超链接按钮一个固定的宽度,它看起来不错,但当列被调整大小时它变得混乱。
单元格内容具有以下样式。
<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>
目前看起来是这样的。
预期
我找到了解决方案。解决办法是设置cellcontent的水平对齐方式为"Stretch".
覆盖列的 BindCellContent 方法。
public override void BindCellContent(FrameworkElement cellContent, DataGridRow row)
{
var hyperlinkButton = (HyperlinkClear)cellContent;
hyperlinkButton.HorizontalAlignment = HorizontalAlignment.Stretch;
}
我已经尝试了一段时间了。我只是卡住了,无法通过它。
数据网格单元格中有三个控件。
1:超链接按钮 2:清除按钮 3: 搜索按钮
我需要做的是将 "clear" 和 "open button" 对齐到列的右侧。要注意的是列是可以调整大小的。 我试着给超链接按钮一个固定的宽度,它看起来不错,但当列被调整大小时它变得混乱。
单元格内容具有以下样式。
<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>
目前看起来是这样的。
预期
我找到了解决方案。解决办法是设置cellcontent的水平对齐方式为"Stretch".
覆盖列的 BindCellContent 方法。
public override void BindCellContent(FrameworkElement cellContent, DataGridRow row)
{
var hyperlinkButton = (HyperlinkClear)cellContent;
hyperlinkButton.HorizontalAlignment = HorizontalAlignment.Stretch;
}