如何在WPF中正确设置按钮的样式?

时间:2010-07-28 14:27:48

标签: wpf visual-studio-2008 .net-3.5

我知道这是一个基本问题,但我在理解如何正确理解这一点时遇到了一些麻烦。

鉴于以下XAML:

<Button>
    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="16" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Image Grid.Column="0" Width="16" Height="16" Source="Resources/accept.png" />
        <TextBlock Grid.Column="1" Margin="2">Continue</TextBlock>
    </Grid>
</Button>

如何将其转换为样式以便轻松重复使用?如果我想要在属性中提供图像源和文本,该怎么办?这可能吗?

在相关的说明中,构建存储样式的文件的最佳实践是什么?您是否只是将它们放入一个新的XAML文件并将它们粘贴在样式解决方案文件夹中?

我对WPF很新,所以,我再次为基本问题道歉。

伊恩

2 个答案:

答案 0 :(得分:1)

你真正想要的是一个控件模板,而不仅仅是一个简单的风格。 Here是一个相当不错的教程。

答案 1 :(得分:1)

修改1:

有几种方法可以控制样式。您可以StaticResource访问它们,或提供TargetType,以便将所有样式应用于该类型的控件。

要参数化您的样式,您可以考虑使用DataBinding。例如,如果您有一个为这些按钮提供内容的模型,您可以尝试以下方法:

<Grid.Resources>
    <Style TargetType="Button">
        <Setter Property="Content">
            <Setter.Value>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="16" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>

                    <Image Grid.Column="0" Width="16" Height="16" Source="{Binding Path=Image}" />
                    <TextBlock Grid.Column="1" Margin="2" Text="{Binding Path=Text}" />
                </Grid>
            </Setter.Value>
        </Setter>
    </Style>
</Grid.Resources>

<Button x:Name="myButton1"  Width="100" Height="100" />

这将是如何设置内容的示例。

myButton1.DataContext = new ButtonCaption {Text = "Testing"};

public class ButtonCaption
{
    public Image Image { get; set; }
    public string Text { get; set; }
}