0

私は 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>
4

1 に答える 1

1

BasedOnプロパティを正しい方法で使用しています。問題は、ContentPresenterレンダリングするコントロール (つまり、ボタン) にバインドされていないことです。

ControlTemplateXAML を次のものに置き換えてみてください。

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

TemplateBindingを使用すると、テンプレート化されたコントロールContentPresenterContentプロパティにバインドできます。

于 2015-08-08T21:17:06.640 に答える