0

WPFUserCotrolを作成しました。その中には、デフォルトで3つのグリッドがあります
visibility="collapsed"。次のような依存関係プロパティを作成しました。

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になり、実行時のデフォルトコンストラクターで、これを使用して表示されるパネルを設定できると思いました。代わりに、UIPropertyMetadata(1)で定義されているPanelIdは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;
}

ありがとうございました。

4

1 に答える 1

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;
            }
        }
    }

お役に立てれば...

于 2012-05-16T09:25:39.050 に答える