UWP 中的 FrameworkPropertyMetadata 在哪里?
Posted
技术标签:
【中文标题】UWP 中的 FrameworkPropertyMetadata 在哪里?【英文标题】:Where's FrameworkPropertyMetadata in UWP? 【发布时间】:2016-02-15 23:54:11 【问题描述】:和/或如何在我的控件上定义一个DependencyProperty
来分隔AffectsMeasure
?
编辑:哦,刚刚看到这个 - 我必须在 propertychangedhandler 中的 this
上调用 InvalidateMeasure
吗?
【问题讨论】:
【参考方案1】:对不起。不支持 UWP AffectsMeasure。对于 Framework 3+,它可以工作。对于默认 UWP 绑定,我正在使用 CodeSnipped 功能。通过事件处理,您可以透明地行事。我的 UWP 代码片段的结果对于我的模型如下所示:
#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、应用商店、VS 2017、 Microsoft.NETCore.UniversalWindowsPlatform 版本 5.2.3
【讨论】:
我不确定您是否已针对正确的问题发布了此答案...您是否比我如何定义 DependencyProperty 了解得更深入? 对不起。不支持 UWP AffectsMeasure。对于 Framework 3+,它可以工作。只需将FrameworkPropertyMetadata
替换为PropertyMetadata
并在您的ViewModel 中使用命名空间namespace Windows.UI.Xaml
。据我了解,这将完全解决您的问题并回答您的问题。
嗯,这就是我在问题中发布的信息。不,我的问题没有解决。如果您仔细阅读,我想要一个触发新测量通道的依赖属性。因为这就是InvalidateMeasure
所做的。您的示例触发了新的测量过程,因为绑定进入了可见性。试试Tag
,告诉我它很管用。以上是关于UWP 中的 FrameworkPropertyMetadata 在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 VisualStudio 2019 为 Microsoft.Toolkit.Uwp.UI.Controls 中的控件获取 UWP 的默认模板(样式代码)?