2010-07-06 41 views
8

Tôi mới bắt đầu WPF sáng nay vì vậy đây là (hy vọng) một câu hỏi dễ giải quyết. Tôi đã bắt đầu với việc tạo ra một nút có một nền gradient. Tôi muốn khai báo các màu bắt đầu và kết thúc của gradient trong thuộc tính của điều khiển và sau đó áp dụng chúng trong mẫu. Tôi gặp sự cố khi nhận mã để biên dịch. Ngoại lệ tôi nhận được là xaml nói với tôi rằng tài sản không thể truy cập được nhưng khi tôi thay đổi chế độ hiển thị đối với công chúng, nó không thể tìm thấy thuộc tính tĩnh ...Thêm thuộc tính vào điều khiển WPF tùy chỉnh?

Đây là xaml của tôi cho đến nay :

<StackPanel> 
    <StackPanel.Resources> 
     <Style TargetType="my:GradientButton"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type my:GradientButton}"> 
         <Grid> 
          <Ellipse Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Stroke="{TemplateBinding Foreground}" VerticalAlignment="Top" HorizontalAlignment="Left"> 
           <Ellipse.Fill> 
            <LinearGradientBrush> 
             <GradientStop Color="{TemplateBinding GradientStart}" Offset="0"></GradientStop><!--Problem on this line!!!--> 
             <GradientStop Color="{TemplateBinding GradientEnd}" Offset="1"></GradientStop> 
            </LinearGradientBrush> 
           </Ellipse.Fill> 
          </Ellipse> 
          <Polygon Points="18,12 18,38, 35,25" Fill="{TemplateBinding Foreground}" /> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </StackPanel.Resources> 
    <my:GradientButton x:Name="btnPlay" Height="50" Width="50" Foreground="Black" Click="Button_Click" GradientStart="#CCCCCC" GradientEnd="#7777777" /> 
</StackPanel> 

Và đây là đoạn code để điều khiển tùy chỉnh của tôi:

public class GradientButton : Button 
{ 
    static DependencyProperty GradientStartProperty; 
    static DependencyProperty GradientEndProperty; 

    static GradientButton() 
    { 
     GradientStartProperty = DependencyProperty.Register("GradientStart", typeof(Color), typeof(GradientButton)); 
     GradientEndProperty = DependencyProperty.Register("GradientEnd", typeof(Color), typeof(GradientButton)); 
    } 

    public Color GradientStart 
    { 
     get { return (Color)base.GetValue(GradientStartProperty); } 
     set { base.SetValue(GradientStartProperty, value); } 
    } 

    public Color GradientEnd 
    { 
     get { return (Color)base.GetValue(GradientEndProperty); } 
     set { base.SetValue(GradientEndProperty, value); } 
    } 
} 

EDIT: đây là ngoại lệ thiết kế thời gian tôi nhận được

Cannot reference the static member 'GradientStartProperty' on the type 'GradientButton' as it is not accessible. 

Trả lời

9

I figured it out ... này:

static DependencyProperty GradientStartProperty; 
static DependencyProperty GradientEndProperty; 

cần thiết phải được thay đổi như sau:

public static DependencyProperty GradientStartProperty; 
public static DependencyProperty GradientEndProperty; 
Các vấn đề liên quan