【问题标题】:WPF: How to use BasedOn StyleWPF:如何使用 BasedOn 样式
【发布时间】:2015-08-08 20:07:40
【问题描述】:

我是 WPF 新手,我创建了以下简单样式示例。但它不能正常工作并且按钮的内容没有显示,虽然我仍然可以点击它。谁能告诉我为什么它坏了?

<Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border BorderBrush="Blue" 
                            BorderThickness="5" 
                            Background="Aqua"
                            Width="80"
                            Height="40">
                        <ContentPresenter></ContentPresenter>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="Grid" x:Name="GridWithMarginStyle">
        <Setter Property="Margin" Value="12"></Setter>
    </Style>

</Window.Resources>
<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
            <EventSetter Event="Button.Click" Handler="ButtonHandler" />
            <Setter Property="Background" Value="Red"></Setter>
            <Setter Property="Foreground" Value="White"></Setter>
        </Style>
    </StackPanel.Resources>
    <Button Name="OkBtn">OK</Button>
    <Button Name="CancelBtn" Click="CancelBtn_Click">Cancel</Button>
</StackPanel>

【问题讨论】:

    标签: wpf styles basedon


    【解决方案1】:

    您正在以正确的方式使用BasedOn 属性。问题是您的 ContentPresenter 没有绑定到它呈现的控件(即按钮)。

    试着用这个替换你的ControlTemplate XAML:

    <ControlTemplate TargetType="{x:Type Button}">
        <Border BorderBrush="Blue" 
            BorderThickness="5" 
            Background="Aqua"
            Width="80"
            Height="40">
            <ContentPresenter Content="{TemplateBinding Content}" />
        </Border>
    </ControlTemplate>
    

    通过使用TemplateBinding,您可以将ContentPresenter 绑定到模板化控件的Content 属性。

    【讨论】:

    • 感谢您的快速回答。我必须使用 而不是 让它工作。但是你给我一些想法该怎么做。谢谢。
    • 这很奇怪。我用 .NET 框架 4.0 尝试了你的 XAML,它可以工作。请问您使用的是哪个框架版本?无论如何,TemplatedParent 应该可以使用您使用的任何版本。您的解决方案没有错,但 AFAIK 'RelativeSource TemplatedParent' 比使用 TemplatedParent 慢一点。
    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多