gpt4 book ai didi

silverlight - 如何对齐文本,使其位于 Silverlight 中按钮的中间?

转载 作者:行者123 更新时间:2023-12-03 00:50:40 25 4
gpt4 key购买 nike

这是我当前使用的代码:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonPrototype.MainPage"
Width="640" Height="480">
<UserControl.Resources>
<ControlTemplate x:Key="CellTemplate" TargetType="Button">
<Grid>
<Border x:Name="CellBorderBrush" BorderBrush="Black" BorderThickness="1">
<ContentPresenter
Content="{TemplateBinding Content}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
</Grid>
</ControlTemplate>

<Style x:Key="CellStyle" TargetType="Button">
<Setter Property="Template" Value="{StaticResource CellTemplate}"></Setter>
<Setter Property="Foreground" Value="Black"></Setter>
<Setter Property="FontSize" Value="80"></Setter>
<Setter Property="Width" Value="100"></Setter>
<Setter Property="Height" Value="100"></Setter>
</Style>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White">
<Button Content="A" Style="{StaticResource CellStyle}"></Button>
</Grid>
</UserControl>

水平对齐有效,但垂直对齐不起作用。感谢您的帮助。

最佳答案

问题在于,通过将字符串分配给 ContentPresenterContent,Silverlight 需要创建一个 TextBlock 形式来呈现字符串。它的 TextBlock 位置不在 ContentPresenter 提供的垂直空间的中心。像这样修改按钮:-

<Button Style="{StaticResource CellStyle}">
<TextBlock Text="A" VertialAlignment="Center" />
</Button>

可以修复它。然而,您可能只想能够指定一个简单的字符串 Content 并将其居中。在这种情况下,您可以修改您的模板:-

<Border x:Name="CellBorderBrush" BorderBrush="Black" BorderThickness="1">
<StackPanel VerticalAlignment="Center"HorizontalAlignment="Center">
<ContentPresenter Content="{TemplateBinding Content}" />
</StackPanel>
</Border>

通过将 ContentPresenter 放置在 StackPanel 中,ContentPresenter 将采用显示其内容所需的最小高度。 StackPanel 反过来只有其内容的高度,然后它在 Border 内居中。

如果我要构建这个,它会是这样的:-

<UserControl x:Class="SilverlightApplication1.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<UserControl.Resources>
<ControlTemplate x:Key="CellTemplate" TargetType="Button">
<Grid>
<Border x:Name="CellBorderBrush"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}" />
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
</Grid>
</ControlTemplate>
<Style x:Key="CellStyle" TargetType="Button">
<Setter Property="Template" Value="{StaticResource CellTemplate}" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontSize" Value="80" />
<Setter Property="Width" Value="100" />
<Setter Property="Height" Value="100" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Padding" Value="1" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Button Style="{StaticResource CellStyle}">
<TextBlock Text="A" VerticalAlignment="Center" />
</Button>
</Grid>
</UserControl>

这是按钮的更通用方法。当然,当样式用于非常特定的本地目的时,使用更简单、更具说明性的模板是可以的。

关于silverlight - 如何对齐文本,使其位于 Silverlight 中按钮的中间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2467733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com