2017-02-13 8 views
0

私はUWPのカスタムコントロールを開発することを学んでおり、ScrollViewerを含むコントロールを開発する必要があります。 generic.xamlは次のようになります。スクロールを使用したUWPカスタムコントロール

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

対応するCSクラスは、今非常に簡単です。私のコントロールで

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

私はプロパティがRegisterPropertyChangedCallbackを使用してスクロールバーのVerticalOffsetプロパティのコールバックを変更登録できることを考えたように、ユーザがコンテンツをスクロールする際に知っている必要があります。 OnApplyTemplateメソッドでコールバックを登録できます。

私の質問は、どこのUnregisterPropertyChangedCallbackを呼び出すべきですか?私は上書きするUnloadメソッド(またはそれに類するもの)を見つけることができませんでした。それとも、私のアプローチが間違っていますか?これはUWPでのやり方ではありませんか?

答えて

2

ここで私は対応するUnregisterPropertyChangedCallbackを呼び出す必要がありますか?

依存関係プロパティのPropertyChangedCallbackからの登録を解除しないでください。

最初にイベントを退会させたい主な理由は2つあります。イベントが公開した情報を受け取ったり、メモリリークの発生を避けたい場合は、もはや興味を持たなくなりました。コントロールの寿命がControlTemplateScrollViewer素子の寿命に等しく、ScrollViewer要素と依存性の両方が、コントロール自体の一部であるので

これらの条件のいずれもここで適用されます。

加入者とイベントの発行者の寿命が異なる場合にのみ、メモリリークが発生することがある:

Why and How to avoid Event Handler memory leaks?

のでPropertyChangedCallbackから登録解除を心配しないでください。

おそらく、コントロールのUnloadedイベントが発生したときに最適な場所になっている可能性があります。

関連する問題