C# 带滚动的UWP自定义控件
我正在学习为UWP开发自定义控件,我必须开发一个包含ScrollViewer的控件。 generic.xaml如下所示:C# 带滚动的UWP自定义控件,c#,uwp,uwp-xaml,C#,Uwp,Uwp Xaml,我正在学习为UWP开发自定义控件,我必须开发一个包含ScrollViewer的控件。 generic.xaml如下所示: <Style TargetType="local:TemplatedScroller" > <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:TemplatedScroller"&
<Style TargetType="local:TemplatedScroller" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:TemplatedScroller">
<ScrollViewer x:Name="NumberScroller"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在我的控件中,我必须知道用户何时滚动内容,因此我认为可以使用RegisterPropertyChangedCallback为scroller的VerticalOffset属性注册一个属性更改回调。我可以在OnApplyTemplate方法中注册回调
我的问题是,我应该在哪里调用相应的UnregisterPropertyChangedCallback?我找不到任何要覆盖的卸载方法(或类似方法)。或者我的方法是错误的,这不是在UWP中做事情的方式
我的问题是,我应该在哪里调用相应的UnregisterPropertyChangedCallback
您不能从依赖项属性的PropertyChangedCallback
注销
首先,有两个主要原因让你想取消订阅某个活动。您可能对接收事件发布的信息不再感兴趣,或者希望避免内存泄漏
由于控件的生存期等于其ControlTemplate
中ScrollViewer
元素的生存期,并且ScrollViewer
元素和依赖项属性都是控件本身的一部分,因此这两个条件在此处均不适用
只有在事件的订阅服务器和发布服务器的生存期不同时,才能泄漏内存:
因此,不要担心从属性ChangedCallback中注销
否则,最好的位置可能是控件的事件发生时
我的问题是,我应该在哪里调用相应的UnregisterPropertyChangedCallback
您不能从依赖项属性的PropertyChangedCallback
注销
首先,有两个主要原因让你想取消订阅某个活动。您可能对接收事件发布的信息不再感兴趣,或者希望避免内存泄漏
由于控件的生存期等于其ControlTemplate
中ScrollViewer
元素的生存期,并且ScrollViewer
元素和依赖项属性都是控件本身的一部分,因此这两个条件在此处均不适用
只有在事件的订阅服务器和发布服务器的生存期不同时,才能泄漏内存:
因此,不要担心从属性ChangedCallback中注销
否则,最好的位置可能是控件的事件发生时
public sealed class TemplatedScroller : Control
{
public TemplatedScroller()
{
this.DefaultStyleKey = typeof(TemplatedScroller);
}
private ScrollViewer numberScroller;
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
numberScroller = GetTemplateChild("NumberScroller") as ScrollViewer;
}
}