2015-11-14 17 views
6

Và/Hoặc làm thế nào để tôi xác định một DependencyProperty trên điều khiển của tôi mà sepcifies AffectsMeasure?FrameworkPropertyMetadata ở đâu trong UWP?

CHỈNH SỬA: ồ, chỉ nhìn thấy điều này - tôi có phải gọi InvalidateMeasure trên this trong propertychangedhandler không?

Trả lời

-1

Rất tiếc. Đối với UWP AffectsMeasure không được hỗ trợ. Đối với Framework 3+ nó hoạt động. Đối với ràng buộc UWP mặc định, tôi đang làm việc với chức năng CodeSnipped. Với eventhandling bạn có thể hành động trong suốt. Kết quả của codeSnippet tôi cho UWP trông như thế này cho mẫu của tôi:

#region IsSelected 

    public static readonly DependencyProperty IsSelectedProperty = 
     DependencyProperty.Register("IsSelected", typeof(bool), typeof(PositionModel), 
      new PropertyMetadata((bool)false, 
       new PropertyChangedCallback(OnIsSelectedChanged))); 

    public bool IsSelected 
    { 
     get { return (bool)GetValue(IsSelectedProperty); } 
     set { SetValue(IsSelectedProperty, value); } 
    } 

    private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     PositionModel target = (PositionModel)d; 
     bool oldIsSelected = (bool)e.OldValue; 
     bool newIsSelected = target.IsSelected; 
     target.OnIsSelectedChanged(oldIsSelected, newIsSelected); 
    } 

    protected virtual void OnIsSelectedChanged(bool oldIsSelected, bool newIsSelected) 
    { 
     // Do what your need in your property changed event 
     // In my case, I just raise the PropertyChanged for PropertyChangedEventHandler 
     // RaisePropertyChanged(nameof(IsSelected)); 
    } 
    #endregion 

XAML:

<Rectangle Fill="Black" Visibility="{x:Bind IsSelected, Mode=OneWay, Converter={StaticResource BoolToVis}}" /> 

Windows 10, Store, VS 2017, Microsoft.NETCore.UniversalWindowsPlatform Version 5.2.3

+0

Tôi không chắc chắn bạn đã đăng câu trả lời này cho câu hỏi đúng ... bạn đã đọc thêm hơn _how để tôi xác định một DependencyProperty_? –

+0

Xin lỗi. Đối với UWP AffectsMeasure không được hỗ trợ. Đối với Framework 3+ nó hoạt động. Chỉ cần thay thế 'FrameworkPropertyMetadata' bằng' PropertyMetadata' và sử dụng không gian tên 'namespace Windows.UI.Xaml' trong ViewModel của bạn. Như tôi đã hiểu, điều đó sẽ giải quyết chính xác vấn đề của bạn và trả lời câu hỏi của bạn. – Nasenbaer

+0

Vâng, đó là càng nhiều thông tin như tôi đã đăng trong câu hỏi của tôi. Và không, câu hỏi của tôi không được giải quyết. Nếu bạn đọc kỹ, tôi muốn một thuộc tính phụ thuộc kích hoạt một giá trị đo mới. Bởi vì đó là những gì 'InvalidateMeasure' đã làm. Ví dụ của bạn sẽ kích hoạt một phép đo mới vì Ràng buộc đi đến Khả năng hiển thị. Hãy thử 'Tag' và cho tôi biết nó hoạt động. –