2

現在、Silverlightで、要素のサイズの変更を検出してそれに対応したいという問題があります。ただし、の機能が呼び出される前に、変更するサイズの要素がフラッシュされることが多いため、実際には、で聞くだけで.SizeChangedは不十分です。.SizeChangedですから、おそらく2つの質問があります。

私の意図は、サイズが視覚的に変更される前に、メジャーパスを使用して適用する操作を計算し、このちらつきの影響を排除できるようにすることです。私の知る限り、これを正常に行う唯一の方法は、これらの要素の残りを測定する前に、Measureパスでこれらの計算を行うUIElementを作成することです。

そのため、FrameworkElementを拡張して、非常に軽量なUIElementを作成したいと考えていました。 しかし、私は愚かなことを何も表示することができません。FrameworkElementレベルでは、サブクラスでVisualTreeにコンテンツを追加する必要があり、その方法を理解できないようです。

私は、必要なものよりもはるかに重いので、拡張することを避けたいと思っていましUserControlた。Panelメジャーパスをキャッチして、そこで作業を実行したいだけです。

FrameworkElementでは、 Silverlight 4.0で拡張して、実際に何かをレンダリングすることは可能ですか?そうでない場合、別の方法でメジャーパスをリッスン/中断することは可能ですか?

4

1 に答える 1

1

コンテンツをビジュアル ツリーに手動で追加することはできません。この機能は、組み込みの Silverlight コントロールにのみ公開されます。

Controlこのような状況では、このコントロールが使用する既定のテンプレートから派生させて指定する必要があります。既定のテンプレートでは、ビジュアル ツリーの目的のコンテンツを指定します。

既定のテンプレートを使用できるようにするDefaultStyleKeyには、コンストラクターで指定し、コントロール タイプの値を指定する必要があります。例DefaultStyleKey = GetType()

次に、このようなスタイルを指定できます。Themes/Generic.xaml

<Style TargetType="my:MyControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="my:MyControl">
                <Rectangle Width="100" Height="100" Fill="Red" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

または、コントロールがコンテンツ表示コントロールである場合は、派生するだけContentControlですべての配管が処理さContentれます。表示したいものに設定するだけで、サブクラスはメジャーパス オーバーライド ロジックを実行するだけで済みます。

于 2011-05-23T10:06:42.123 に答える