将控件添加到样式wpf

时间:2012-04-04 01:19:48

标签: wpf templates xaml styles

    <Style x:Key="MyButton" TargetType="{x:Type Border}">
        <Style.Resources>
            <Style TargetType="{x:Type TextBlock}">                    
                <Setter Property="FontSize" Value="24"/>
                <Setter Property="Foreground" Value="{StaticResource FontColor}"/>                    
                <Setter Property="HorizontalAlignment" Value="Center"/>
                <Setter Property="Cursor" Value="Hand"/>
                <Setter Property="FontWeight" Value="DemiBold" />
                <Setter Property="Effect">
                    <Setter.Value>
                        <BlurEffect Radius="2" ></BlurEffect>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="FontWeight" Value="ExtraBold" />
                    </Trigger>                                                
                </Style.Triggers>
            </Style>
        </Style.Resources>
    </Style>  

我想创建自己的按钮样式,包括边框和文本块。如何为我的风格添加控件?我实际上想要添加一个额外的文本块,以便我可以模糊背面的文本框,使其看起来像一个发光。

2 个答案:

答案 0 :(得分:2)

我不确定你想要第二个模糊文本块的确切外观,但是下面的xaml应该可以帮助你创建你想要的按钮模板。

每个文本块以及边框都有自己的样式,因此您可以单独设置它们的样式并将它们全部包装在按钮样式的控件模板中:

<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">
<Window.Resources>
    <Style x:Key="MainTextBlock" TargetType="{x:Type TextBlock}">
        <Setter Property="FontSize" Value="24"/>
        <Setter Property="Foreground" Value="Blue"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="Cursor" Value="Hand"/>
        <Setter Property="FontWeight" Value="DemiBold" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="FontWeight" Value="ExtraBold" />
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="BlurTextBlock" TargetType="{x:Type TextBlock}">
        <Setter Property="FontSize" Value="24"/>
        <Setter Property="Foreground" Value="Blue"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="Cursor" Value="Hand"/>
        <Setter Property="FontWeight" Value="DemiBold" />
        <Setter Property="Effect">
            <Setter.Value>
                <BlurEffect Radius="2" ></BlurEffect>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="BorderStyle" TargetType="Border">
        <Setter Property="BorderBrush" Value="Orange" />
        <Setter Property="BorderThickness" Value="2" />
    </Style>

    <Style x:Key="MyButton" TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Style="{StaticResource BorderStyle}">
                        <Grid>
                            <TextBlock Style="{StaticResource MainTextBlock}" Text="{TemplateBinding Content}" />
                            <TextBlock Style="{StaticResource BlurTextBlock}" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <Button Style="{StaticResource ResourceKey=MyButton}" Height="30" Width="100" Content="BUTTON" />
</Grid></Window>

答案 1 :(得分:0)

Button没有Text属性,它有一个Content属性。

Content属性可以是一个字符串,但你不能指望它总是一个字符串。

问题是你想要设置内容样式,但你不能。这是一个容器。您可以将图像或网格或整个xaml层次结构添加到Content属性。

所以你需要在内容中添加一个TextBlock。

<Button HorizontalAlignment="Left" Margin="190,113,0,0" VerticalAlignment="Top" Width="75">
    <Button.Content>
        <Grid>
            <TextBlock Text="Click Me!" />
            <TextBlock Text="Click Me!">
                <TextBlock.Effect>
                    <BlurEffect Radius="2" />
                </TextBlock.Effect>
            </TextBlock>
        </Grid>
    </Button.Content>
</Button>

所以这似乎不需要样式,只需要将属性Content添加到Button.Content属性。