0

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

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

在此处输入图像描述

  1. 如何使顶部的值居中和底部的文本居中?

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

非常感谢

4

3 回答 3

2

我认为最简单的方法是在按钮内使用两个文本块并设置数据绑定。

<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 属性按钮的内容不会刷新)

于 2012-09-07T18:29:08.797 回答
1
    <StackPanel Visibility="{Binding Path=Option1, Converter={StaticResource myDoubleToVisibilityConverter}}">
        <TextBlock HorizontalAlignment="Center" Text="{Binding Path=Option1}"/>
        <TextBlock HorizontalAlignment="Center" Text="Center" />
    </StackPanel>

您现在不需要在代码中设置文本。只需实现myDoubleToVisibilityConverterINotifyPropertyChanged接口

在这种情况下,直接设置 Button 的内容是对 WPF 意识形态的某种违反。

于 2012-09-07T20:37:09.077 回答
0

尝试使用此代码 (\r\n)

 button1.Content = (option1 != 0.0)
            ? option1.ToString() + "\r\n"   +  "Centre"
            : string.Empty;

你也可以使用Environment.NewLine

于 2012-09-07T18:25:41.550 回答