没有按钮控件的界面框架是不完整的。所以,WPF当然也有自己的按钮控件。就像WPF其它的控件一样,按钮控件的使用非常灵活,几乎可以让你实现任何东西。就让我们从以下几个简单例子开始吧:
像其他的WPF控件一样,您可以用Button标记定义按钮控件。如果你在标记定义中间加入文字,文字的内容就是按钮的文字内容。
<Button>Hello, world!</Button>
很简单吧?当然,上面这个例子里的按钮并没有任何实际的逻辑在里面。不过,如果你把鼠标移上去,就能发现它周围一圈还是有一个不错的悬浮效果的。下面就让我们给它加点事件逻辑进去,订阅它的Click事件(关于事件流程的细节,您可以在订阅XAML的事件章节找到更多内容):
<Button Click="HelloWorldButton_Click">Hello, World!</Button>
在后台代码,你需要一个对应的方法处理 click 事件:
private void HelloWorldButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!");
}
现在你有了一个非常简单的按钮,当你点击它时,一条消息会显示出来!
控件内部,Button 控件的 Content 文字内容会被转换为 TextBlock 控件,也就是说你可以按照 TextBlock 的方式控制 Button 控件文字的样式。在 Button 控件中,你会找到几个这样的特性,包括(但不限于)Foreground, Background, FontWeight 等等。换一种说法,改变 Button 控件文本格式是非常简单的:
<Button Background="Beige" Foreground="Blue" FontWeight="Bold">Formatted Button</Button>
通过直接在Button上设置这些属性,您当然只能对所有内容应用相同的格式,但如果这还不够好,请继续阅读以获得更高级的内容格式。
我们已经多次讨论过这个问题,但是关于WPF的一个非常酷的事情是能够用其他WPF控件替换控件中的简单文本。 这也意味着您不必将按钮限制为简单文本,格式相同 - 您可以添加多个具有不同格式的文本控件。 WPF Button仅支持一个直接子控件,但您可以将其设置为Panel,然后将根据需要放入任意数量的控件。 您可以使用它来创建具有各种格式的按钮:
<Button>
<StackPanel Orientation="Horizontal">
<TextBlock>Formatted </TextBlock>
<TextBlock Foreground="Blue" FontWeight="Bold" Margin="2,0">Button</TextBlock>
<TextBlock Foreground="Gray" FontStyle="Italic">[Various]</TextBlock>
</StackPanel>
</Button>
但是,不仅仅局限于文字 - 你可以把任何你想要的东西放在你的按钮里面,接下来到一个我知道很多人会要求的主题。 带图片的按钮!
在许多UI框架中,您将找到常规Button,然后是一个或多个其他变体,它们将提供额外的功能。 最常用的变体之一是ImageButton,顾名思义,它是一个Button,它通常允许您在文本之前包含图片。 但是在WPF中,不需要单独的控件来实现这一点 - 正如您刚才看到的,我们可以在Button中放置几个控件,这样您就可以轻松地向它添加一个Image控件,如下所示:
<Button Padding="5">
<StackPanel Orientation="Horizontal">
<Image Source="/WpfTutorialSamples;component/Images/help.png" />
<TextBlock Margin="5,0">Help</TextBlock>
</StackPanel>
</Button>
在WPF中创建一个ImageButton真的很简单,你当然可以自由移动,例如 如果你想在文本之后而不是之前的图片等。
您可能已经注意到WPF框架中的按钮默认情况下没有任何填充。 这意味着文本非常接近边框,这可能看起来有点奇怪,因为在其他地方找到的大多数按钮(web,其他应用程序等)确实在侧面至少有一些填充。 不用担心,因为Button带有Padding属性:
<Button Padding="5,2">Hello, World!</Button>
这将在边上应用5像素的填充,在顶部和底部应用2个像素。 但是必须在所有按钮上应用填充可能会在某个时刻有点令人厌烦,所以这里有一个小提示:您可以使用样式在整个应用程序或整个应用程序中全局应用填充(后面的样式有更多)。 这里使用Window.Resources属性将它应用于Window的示例:
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Padding" Value="5,2"/>
</Style>
</Window.Resources>
此填充现在将应用于所有按钮,但您当然可以通过在Button上专门定义Padding属性来覆盖它。 以下是此示例的所有按钮使用公共填充:
正如您在本文中所看到的,使用WPF框架中的按钮非常简单,您可以无限制地自定义此重要控件。