Button内的文本格式

时间:2012-09-07 18:05:49

标签: c# wpf xaml

我正在努力在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"/>

但这并没有给我我想要的布局,(见下文)

enter image description here

  1. 如何让顶部的两个值居中,底部的文字居中?

  2. 如果我希望底部文字的字体大小为10 粗体,顶部的字体大小为14正常 - 我该怎么做?

  3. 非常感谢

3 个答案:

答案 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