2017-06-30 6 views
1

In UWP versuche ich Standardvorlage von Tooltip zu ändern.C# uwp Templatebinding und Abhängigkeitseigenschaft

Ich habe es geschafft, aber jetzt muss ich Tooltip Pfeil auf das Steuerelement, das gehört zu zeigen.

Mein Stil ist wie folgt definiert:

<Style TargetType="ToolTip"> 
     <Setter Property="Foreground" Value="White" /> 
     <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}" /> 
     <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundChromeHighBrush}" /> 
     <Setter Property="BorderThickness" Value="{ThemeResource ToolTipBorderThemeThickness}" /> 
     <Setter Property="FontFamily" Value="Roboto" /> 
     <Setter Property="FontSize" Value="{ThemeResource ToolTipContentThemeFontSize}" /> 
     <Setter Property="Padding" Value="40,40,40,35"/> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ToolTip"> 

        <Grid Background="Transparent"> 

         <Grid 
          MinWidth="100" 
          MinHeight="90" 
          Height="{TemplateBinding Height}" 
          Width="{TemplateBinding Width}" 
          Padding="15" 
          Background="Transparent"> 

Und so weiter und weiter ...

Aber jetzt versuche ich, Usercontrol bindet mit Template Eigenschaft zu machen.

Ich habe UserControl erstellt, die einige Abhängigkeiten besitzen. So:

public PlacementMode TooltipPlacement 
    { 
     get { return (PlacementMode)GetValue(TooltipPlacementProperty); } 
     set { SetValue(TooltipPlacementProperty, value); CalculateArrowVisibility(); } 
    } 

    public static readonly DependencyProperty TooltipPlacementProperty = 
     DependencyProperty.Register("TooltipPlacement", typeof(PlacementMode), typeof(ArrowDown), null); 

CalculateArrowVisibility() ist eine Methode, die den Pfeil Lage je nach TooltipPlacement berechnen wird.

Und dass die Kontrolle in der Art, wie diese definiert ist:

<local:ArrowDown x:Name="arrow" TooltipPlacement="{TemplateBinding Placement}"/> 

Aber es ist nicht gebunden, habe ich andere TemplateProperties versucht, aber auch kein Glück.

Wo ist das Problem hier?

+0

Was 'Content' ist in' TooltipPlacement = "{Template Inhalt}" '? –

+0

Ich habe einen Fehler beim Kopieren-Einfügen ... es sollte sein: user3239349

+0

Was ist 'SetValue()' in 'set {SetValue (TooltipPlacementProperty, Wert); SetValue(); } '? Ist es eine Funktionsüberlastung, um eine andere Operation auszuführen? –

Antwort

1

Sie sind sehr nahe expet die Art, wie Sie die Abhängigkeit Eigenschaft delcare sind falsch.

Sie sollten niemals den Getter und Setter ändern. Rufen Sie stattdessen Ihre CalculateArrowVisibility Methode in seiner Eigenschaft Callback wie folgt geändert -

public PlacementMode TooltipPlacement 
{ 
    get => (PlacementMode)GetValue(TooltipPlacementProperty); 
    set => SetValue(TooltipPlacementProperty, value); 
} 
public static readonly DependencyProperty TooltipPlacementProperty = 
    DependencyProperty.Register("TooltipPlacement", typeof(PlacementMode), typeof(ArrowDown), 
     new PropertyMetadata(null, TooltipPlacementChangedCallback)); 

private static void TooltipPlacementChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var self = (ArrowDown)d; 
    self.CalculateArrowVisibility(); 
} 
+0

Trotzdem wird der binding part nicht ausgeführt. Ich habe Bruchstellen überprüft und kein Glück. – user3239349

+0

@ user3239349 Sie müssen irgendwo woanders etwas falsch gemacht haben. Ich habe ein Projekt erstellt, genau wie du es beschrieben hast. Bearbeiten Sie die Frage mit mehr Code oder stellen Sie mir ein Repo zur Verfügung, damit ich es testen kann. –

+0

Mit dem Bearbeiten der Abhängigkeitseigenschaft funktioniert es jetzt. Danke, das war das einzige Problem in meinem Code. – user3239349

Verwandte Themen