2013-02-20 15 views
7

io sono nuovo per creare UserControl e ora sto cercando di personalizzare il modello UserControl come di seguito:Come funziona TemplateBinding nel modello UserControl?

<UserControl x:Class="WpfApplication1.PieButton" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" Loaded="OnLoaded"> 
    <UserControl.Template> 
     <ControlTemplate> 
      <Path Name="path" Stroke="Aqua" StrokeThickness="3"> 
       <Path.Fill> 
        <SolidColorBrush Color="{TemplateBinding Fill}" /> 
       </Path.Fill> 
       <Path.Data> 
       ...... 
</UserControl> 

Allo stesso tempo, ho creare il DependencyProperty in codice di back-end:

public partial class PieButton : UserControl 
{ 
    public PieButton() 
    { 
     InitializeComponent(); 
    } 

    private void OnLoaded(object sender, RoutedEventArgs e) 
    { 

    } 



    public Color Fill 
    { 
     get { return (Color)GetValue(FillProperty); } 
     set { SetValue(FillProperty, value); } 
    } 

    public static readonly DependencyProperty FillProperty = 
     DependencyProperty.Register("Fill", typeof(Color), typeof(PieButton)); 
    ...... 

Voglio usare TemplateBinding in XAML per legare la proprietà Fill del mio PieButton per riempire l'oggetto del percorso. Visual Studio Designer mi avvisa che "la proprietà Fill non è accessibile o riconosciuta".

Sulla base della mia comprensione, la TemplateBinding trovare il nome della proprietà dall'elemento che si applicano questa ControlTemplate, che dovrebbe essere PieControl qui, ma perché il Fill proprietà non può accedere qui?

BTW,

ho testare il seguente vincolante, e può funzionare per me

Color="Binding Fill,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}" 

Ma io continuo a pensare che il TemplateBinding dovrebbe essere in grado di lavorare sotto questo scenario, quindi per favore sottolineare colpa mia Qui. Grazie.

risposta

Problemi correlati