Frage

Sagen, dass ich einen Knopf mit abgerundeten Ecken definiert haben.

<Style x:Key="RoundButton" TargetType="Button">
    <!-- bla bla -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border CornerRadius="0,5,5,0" />
                <!-- bla bla -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

ich es möglich, dass der Benutzer dieser Taste kann die Corner angeben? Kann ich ein Template benutzen? Aber wo soll ich binden? (Tag?)

War es hilfreich?

Lösung

Um eine TemplateBinding zu verwenden, muss es eine Eigenschaft auf dem Steuerelement mit Vorlagen sein (Button, in diesem Fall). Button keine CornerRadius oder entsprechende Eigenschaft haben, so dass Ihre Optionen sind:

  • Fest Code der Wert in der Vorlage
  • Hijack eine andere Eigenschaft (wie Tag), um diese Informationen zu speichern. Das ist schneller, aber es fehlt die Sicherheit gibt, ist schwieriger zu pflegen, und verhindert, dass andere Verwendungen dieser Eigenschaft.
  • Subclass Button und fügen Sie den propery Sie benötigen, geben Sie dann eine Vorlage für diese Unterklasse. Das dauert ein wenig länger, aber ergibt sich ein viel schöneres Erlebnis für die Verbraucher von Ihrer Kontrolle.

Andere Tipps

Neben Kent Vorschläge, können Sie auch eine angeschlossene Eigenschaft erstellen, die Corner auf der Schaltfläche zu definieren, und binden an diese Eigenschaft in der Vorlage

Der Tastentyp nicht über eine Eigenschaft für Corner, so dass dieser Templating nicht möglich sein wird. Ich denke, der einfachste Weg, eine neue Klasse zu schaffen, die von Knopf erbt und eine neue Abhängigkeitseigenschaft für die Corner hinzufügen. Wie folgt aus:

using System.Windows;
using System.Windows.Controls;

namespace WpfApplication3
{
    public class RoundedButton:Button
    {
        public CornerRadius CornerRadius
        {
            get { return (CornerRadius) GetValue(CornerRadiusProperty); }
            set { SetValue(CornerRadiusProperty, value); }
        }
        public static readonly DependencyProperty CornerRadiusProperty =
            DependencyProperty.Register("CornerRadius", typeof (CornerRadius), 
            typeof (RoundedButton), new UIPropertyMetadata());
    }
}

In XAML können Sie es verwenden mögen:

<Local:RoundedButton 
    Style="{DynamicResource RoundButton}" 
    Width="64" Height="32" 
    Content="Hello" 
    CornerRadius="1,5,10,5" 
    Background="#FF9CFFD5" />     

Eine Vorlage an den Corner Bindung wird nun ohne Probleme funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top