WPF ControlTemplate: Wie wird ein Standardwert für TemplateBinding bereitgestellt?

Ich Schreibe eine WPF-Steuerelement, dass Unterklassen eine Schaltfläche. Ich habe dann eine Standard-Stil in Themes\generic.xaml, das sieht dann so aus (vereinfacht):

<Style TargetType="{x:Type WPFControls:MyButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type WPFControls:MyButton}">
                <Button 
                    x:Name="PART_Button"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Möchte ich dem Benutzer die Möglichkeit zum ändern des Steuerelements hintergrund, aber wenn er das nicht tut, würde ich gerne default-Wert. Wie mache ich es?

Wenn ich es mache wie in dem geposteten code, den Hintergrund und die BorderBrush-ist null (= nicht existent), es sei denn, der Benutzer gibt explizit an (was effektiv zwingt Nutzer immer einen bestimmten Wert), aber der standard-windows-Steuerelemente (wie Schaltflächen) bieten einen Standard-look, können noch angepasst werden, indem Benutzer. Wie dies in meiner Kontrolle?

Danke!

Lösung von Michael Morton:

Können Sie Standard setter in der Art:

<Style TargetType="{x:Type TestTemplate:MyButton}">
    <Setter Property="Background" Value="Red" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TestTemplate:MyButton}">
                <Button 
                    x:Name="PART_Button"
                    IsEnabled="{TemplateBinding IsEnabled}"
                    Content="{TemplateBinding Content}"
                    Background="{TemplateBinding Background}"
                    />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Verwendung:

<StackPanel>
    <TestTemplate:MyButton Background="Blue">Explicitly blue</TestTemplate:MyButton>
    <TestTemplate:MyButton>Naturally red</TestTemplate:MyButton>
</StackPanel>

InformationsquelleAutor der Frage Tomáš Kafka | 2009-11-24

Schreibe einen Kommentar