2012-05-16 3 views
0

WPF UserCotrol을 만들었습니다. 그 안에는 기본적으로 3 개의 그리드가 있습니다.
visibility="collapsed"입니다. 나는이 같은 종속성 속성을 만들었습니다wpf에서 사용자 지정 컨트롤의 종속성 속성 값을 설정하는 방법

public int PanelId 
    { 
     get { return (int)GetValue(PanelIdProperty); } 
     set { SetValue(PanelIdProperty, value); } 
    } 

public static readonly DependencyProperty PanelIdProperty = 
     DependencyProperty.Register("PanelId", typeof(int), typeof(RecurrencePattern), new UIPropertyMetadata(1)); 

은 내가 다른 XAML에서이 사용자 컨트롤을 사용합니다. 나는이 같은 선언 : 내가 볼 수 무엇 패널 설정하는 데 사용할 수 실행할 때

<uc:RecurrencePattern PanelId="2"/> 

내가이 일을하여 PanelId 2 일 것이라고 생각하고 기본 생성자. 대신 PanelId는 UIPropertyMetadata (1)에 정의 된대로 1입니다. xaml에 제공된 값을 사용하여 표시 할 그리드를 어떻게 설정할 수 있습니까? 내가 가진 : 기본 생성자에서

<Grid x:Name="a" Visibility="Collapsed"> 
    <label Content"a"/> 
</Grid> 
<Grid x:Name="b" Visibility="Collapsed"> 
    <label Content"b"/> 
</Grid> 
<Grid x:Name="c" Visibility="Collapsed"> 
    <label Content"c"/> 
</Grid> 

이 있습니다 :

switch (PanelId) 
    { 
    case 1: 
     a.Visibility = System.Windows.Visibility.Visible; 
     break; 
    case 2: 
     b.Visibility = System.Windows.Visibility.Visible; 
     break; 
    case 3: 
     c.Visibility = System.Windows.Visibility.Visible; 
     break; 
    default: 
     a.Visibility = System.Windows.Visibility.Visible; 
     break; 
} 

감사합니다. 생성자가 완료되기 전에이 도움이

+0

프로퍼티 세터 실행되지 않습니다. 귀하의 접근 방식은 이와 같이 작동하지 않습니다. 생성자의 코드를 예 : [OnInitialized] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.oninitialized.aspx) – Clemens

+0

AngelWPF가 옳습니다. 그러나 여기에서 성취하고자하는 것에 대해서는 종속성 속성이 필요하지 않습니다. 간단한 CLR 속성을 사용하고 OnInitialized에서 값을 확인할 수 있습니다. – Clemens

답변

1

Visibility 변화에 대한 코드는 종속성 속성 변경 이벤트에 있어야합니다 ....

public static readonly DependencyProperty PanelIdProperty 
    = DependencyProperty.Register(
      "PanelId", 
      typeof(int), 
      typeof(RecurrencePattern), 
      new UIPropertyMetadata(1, PanelIdPropertyChangedCallback)); 

    private static void PanelIdPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var recurrencePattern = d as RecurrencePattern; 
     if (recurrencePattern != null) 
     { 
      var panelId = Convert.ToInt32(e.NewValue); 
      switch (panelId) 
      { 
       case 1: 
        recurrencePattern.Visibility 
         = System.Windows.Visibility.Visible; 
        break; 
       case 2: 
        recurrencePattern.Visibility 
         = System.Windows.Visibility.Visible; 
        break; 
       case 3: 
        recurrencePattern.Visibility 
         = System.Windows.Visibility.Visible; 
        break; 
       default: 
        recurrencePattern.Visibility 
         = System.Windows.Visibility.Visible; 
        break; 
      } 
     } 
    } 

희망은 ...

+0

이 설정은 사용자 컨트롤의 가시성을 자체 설정하지 않습니까? RecurrencePattern UserControl 안에있는 격자 a 또는 b 또는 c가 아닙니다. –

+0

좋아, 해냈어. 난 그냥 재발을해야 해 .Pattern.a.Visibility = System.Windows.Visibility.Visible; etc. ... 고맙습니다. –

관련 문제