2013-02-20 16 views
7

Jestem nowy, aby utworzyć UserControl i teraz staram się dostosować usercontrol szablon jak poniżej:Jak działa TemplateBinding w szablonie 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> 

Jednocześnie mam stworzyć DependencyProperty w kodzie 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)); 
    ...... 

Chcę użyć TemplateBinding w XAML, aby powiązać właściwość Fill mojego PieButton, aby wypełnić obiekt ścieżki. Visual Studio Designer ostrzega mnie, że "właściwość Fill nie jest dostępna lub rozpoznana".

podstawie mojego rozumu, TemplateBinding znaleźć nazwę właściwości z elementu, który stosuje tę ControlTemplate, który powinien być PieControl tutaj, ale dlaczego Fill nieruchomości nie może uzyskać dostępu tutaj?

BTW,

przetestować następujące wiążące i mogą pracować dla mnie

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

Ale nadal uważam TemplateBinding powinien móc pracować w tym scenariuszu, więc proszę zwrócić uwagę, moja wina tutaj. Dzięki.

Odpowiedz