Frage

Ich schreibe eine WPF -Steuerung, die eine Taste unterklebt. Ich gebe dann einen Standardstil in Themen generic.xaml, das so aussieht (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>

Ich möchte, dass der Benutzer die Möglichkeit hat, den Hintergrund des Steuerelements zu ändern, aber wenn er es nicht tut, möchte ich den Standardwert angeben. Wie mache ich es?

Wenn ich es wie im veröffentlichten Code mache, ist der Hintergrund und die Grenze null (= nicht existent), es sei denn Das kann immer noch vom Benutzer angepasst werden. Wie mache ich das in meiner Kontrolle?

Vielen Dank!

Lösung von Michael Morton:

Sie können Standardeinstellungen als Setter mit Stil angeben:

<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>

Verwendungszweck:

<StackPanel>
    <TestTemplate:MyButton Background="Blue">Explicitly blue</TestTemplate:MyButton>
    <TestTemplate:MyButton>Naturally red</TestTemplate:MyButton>
</StackPanel>
War es hilfreich?

Lösung

Sie können einfach Setter in Ihrem Stil für die beiden fraglichen Eigenschaften definieren.

Zum Beispiel einige allgemeine Definitionen:

<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#F3F3F3" Offset="0"/>
    <GradientStop Color="#EBEBEB" Offset="0.5"/>
    <GradientStop Color="#DDDDDD" Offset="0.5"/>
    <GradientStop Color="#CDCDCD" Offset="1"/>
</LinearGradientBrush>

<SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>

Dann in Ihrer Stildefinition:

<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}" />
<Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}" />

Andere Tipps

<Style TargetType="{x:Type WPFControls:MyButton}">
    <Setter Property="Background" Value="Black">
    <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>

Achten Sie auf die Seccond -Zeichenfolge, ich setze die schwarze Farbe auf den Hintergrund -Standardwert.

Wenn Sie eine Abhängigkeitseigenschaft für Ihre Steuerelemente deklarieren

Diese Eigenschaft wird standardmäßig bürsten.RED, wie Sie in der letzten Zeile sehen.

  public Brush MyBrush {
     get { return (Brush)GetValue(MyBrushProperty); }
     set { SetValue(MyBrushProperty, value); }
  }

  public static readonly DependencyProperty MyBrushProperty =
      DependencyProperty.Register("MyBrush", typeof(Brush), typeof(MyQsFeature), new UIPropertyMetadata(Brushes.Red));

Die andere Möglichkeit, wie Sie dies tun könnten, besteht darin, die Standardfarbe im Konstruktor Ihres benutzerdefinierten Steuerelements festzulegen, da der Konstruktor immer aufgerufen wird, bevor die Eigenschaften vom Benutzer festgelegt werden, wenn der Benutzer sie nicht festlegt, würde er standardmäßig auf Ihre einstellen. Tatsächlich werden sie immer von Ihnen festgelegt, und dann wird jede Benutzereinstellung Ihre überschreiben. Dies ist effektiv, wenn Sie die Eigenschaften wie den Hintergrund festlegen möchten, den Sie nicht tatsächlich erstellen, diejenigen, die aus Ihren Basisklassen stammen, von denen Sie erben.

Es ist auch möglich, den Standardstil des "Erben" zu "erben" Button Element durch Erstellen von Beispielinstanzen und Verweisen auf die Eigenschaften:

<Button x:Key="DefaultButton"/>

<Style TargetType="{x:Type TestTemplate:MyButton}">
        <Setter Property="Background"
                Value="{Binding Path=Background, Source={StaticResource DefaultButton}}" />
</Style>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top