2017-03-29 12 views
1

UserControl ImageViewには、UseOverlayという名前のcutomプロパティを追加します。初期化時にカスタム依存プロパティーが設定されていません

<XAML> 

<UserControl x:Class="ImageView" .../> 

<XAML.cs> 
public partial class ImageView : UserControl 
{ 
    public static DependencyProperty UseOverlayProperty;  
    public ImageView() 
    { 
     InitializeComponent(); 
     if (UseOverlay) 
     { 
      AddOverlay(); 
     } 
    }  

    static ImageView() 
    { 
     UseOverlayProperty = DependencyProperty.Register("UseOverlay", typeof(bool), typeof(ImageView), new PropertyMetadata(false)); 
    } 

    public bool UseOverlay 
    { 
     get { return (bool)GetValue(UseOverlayProperty); } 
     set { SetValue(UseOverlayProperty, value); } 
    } 

} 

ただし、別のuserControlから使用すると、プロパティは設定されません。 ImageViewは表示されますが、オーバーレイは表示されず、デバッグではUseOverlayがfalseとして表示されます。

<ImageView MaxWidth="450" UseOverlay="True"/> 

私には何が欠けていますか?

+0

あなたはすべてのエラーメッセージのためのあなたの出力ウィンドウをチェックしましたか? –

+0

この問題に関連するエラーや警告はありません – lewi

答えて

2

現時点ではUseOverlayがコンストラクタで1回だけ使用されます(デフォルト値ではfalse)。 UseOverlay="True"が適用されても何も起こりません。あなたはDP ChangedCallbackを追加する必要があります。

DependencyProperty.Register("UseOverlay", typeof(bool), typeof(ImageView), 
          new PropertyMetadata(false, UseOverlayChangedCallback)); 
​​
0

まずあなたがレジスタ

new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
             RatingValueChanged) 
の最後の部分を置き換える、あなたはこれでデフォルトを追加することができ

#region --------------------Is playing-------------------- 
    /// <summary> 
    /// Playing status 
    /// </summary> 
    public static readonly DependencyProperty IsPlayingProperty = DependencyProperty.Register("IsPlaying", typeof(bool), typeof(WaitSpin), 
             new FrameworkPropertyMetadata(new PropertyChangedCallback(OnIsPlayingChanged))); 

    /// <summary> 
    /// OnIsPlayingChanged callback 
    /// </summary> 
    /// <param name="d"></param> 
    /// <param name="e"></param> 
    private static void OnIsPlayingChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(d)) 
      return; 

     WaitSpin element = d as WaitSpin; 
     element.ChangePlayMode((bool)e.NewValue); 
    } 

    /// <summary> 
    /// IsPlaying 
    /// </summary> 
    [System.ComponentModel.Category("Loading Animation Properties"), System.ComponentModel.Description("Incates wheter is playing or not.")] 
    public bool IsPlaying 
    { 
     get { return (bool)GetValue(IsPlayingProperty); } 
     set { SetValue(IsPlayingProperty, value); } 
    } 
    #endregion 

を(デフォルト値whithout)コンストラクタでそれを使用してレイアウトを更新するためにコールバックを使用しないでください

関連する問題