我正在努力在WPF按钮上获得更精细的布局问题,基本上我试图将文本置于按钮内?目前,我在代码中动态设置了几个与
类似的按钮 button1.Content = (option1 != 0.0)
? option1.ToString() + "\n" + "Centre"
: string.Empty;
button2.Content = (option2 != 0.0)
? option2.ToString() + "\n" + "Quite"
: string.Empty;
button3.Content = (option3 != 0.0)
? option.ToString() + "\n" + "Not"
: string.Empty;
并且在XAML中,垂直和水平内容对齐都是中心?
<Button Height="30" HorizontalAlignment="Left" Margin="254,0,0,0" Name="button1"
VerticalAlignment="Top" Width="50" Click="button_Click"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10"
FontStretch="SemiCondensed"/>
但这并没有给我我想要的布局,(见下文)
如何让顶部的两个值居中,底部的文字居中?
如果我希望底部文字的字体大小为10 粗体,顶部的字体大小为14正常 - 我该怎么做?
非常感谢
答案 0 :(得分:2)
我认为最简单的方法是在Button中使用两个Textblock并设置数据绑定。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel Orientation="Horizontal" TextBlock.TextAlignment="Center" >
<Button Height="50" Width="80">
<StackPanel>
<TextBlock Text="{Binding Text1}" FontSize="14" />
<TextBlock Text="{Binding Text2}" FontSize="10" FontWeight="Bold"/>
</StackPanel>
</Button>
</StackPanel>
public partial class MainWindow : Window
{
public string Text1 { get; set; }
public string Text2 { get; set; }
public MainWindow()
{
InitializeComponent();
Text1 = "10";
Text2 = "TEST Test";
DataContext = this;
}
}
如果您还不知道这种模式,请阅读MVVM / INotifyPropertychanged教程(因为我的示例没有实现此接口,如果更改TextX属性,则按钮的内容将不会刷新)
答案 1 :(得分:2)
<StackPanel Visibility="{Binding Path=Option1, Converter={StaticResource myDoubleToVisibilityConverter}}">
<TextBlock HorizontalAlignment="Center" Text="{Binding Path=Option1}"/>
<TextBlock HorizontalAlignment="Center" Text="Center" />
</StackPanel>
您现在不需要在代码中设置文本。只需实现 myDoubleToVisibilityConverter 和 INotifyPropertyChanged 界面
在这种情况下,直接设置Button的内容是对WPF意识形态的某种违反。
答案 2 :(得分:0)
尝试使用此代码(\ r \ n)
button1.Content = (option1 != 0.0)
? option1.ToString() + "\r\n" + "Centre"
: string.Empty;
您也可以使用Environment.NewLine