0

プログラムでアクセスできるようにしたいもの (この場合はグラデーション) を含むこの ControlTemplate があり、何時間にもわたる試行錯誤の末、ようやく StackOverflow に支援を求める時が来たと感じています。

テンプレートは花を生成しますが、何を使用すればよいかわからなかったので、以前に同様の方法で使用したことがある Thumb 要素を選択しました。他にもっと適していると思われるものがあれば教えてください。

とにかく、これは XAML ファイルからの私の ControlTemplate の始まりです:

<ControlTemplate x:Key="cherryFlowerStyle" TargetType="{x:Type Thumb}">
                        <Viewbox Width="119.560" Height="114.268" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
                            <Canvas Width="119.560" Height="114.268">
                                <Canvas>
                                    <!-- Layer 1/<Path> -->
                                    <Path Data="... (removed to save space) ...">
                                        <Path.Fill>
                                            <RadialGradientBrush x:Name="cherryFlowerColorGradient" MappingMode="Absolute" GradientOrigin="593.380,333.416" Center="593.380,333.416" RadiusX="36.460" RadiusY="36.460">
                                                <RadialGradientBrush.GradientStops>
                                                    <!-- Flower color -->
                                                    <GradientStop x:Name="cherryFlowerColorGradientOuterColor" Offset="0.15" Color="#ffd6e062"/>

そして、これが私がC#でやっていることです:

Thumb flower = new Thumb();
flower.Template = TryFindResource("cherryFlowerStyle") as ControlTemplate;
GradientStop grStop = (GradientStop)flower.Template.FindName("cherryFlowerColorGradientOuterColor", flower);
                        Console.WriteLine("gradient: " +grStop);

新しい Thumb を作成し、テンプレートを適用すると機能します (キャンバス上に花として描かれます)。ただし、テンプレート内のグラデーションにアクセスしようとしてもうまくいきません。これに対する良い解決策があることを願っています。(XAML で) 画面外に花を作成し、コード ビハインドでそれを参照します。

前もって感謝します!

4

1 に答える 1

0

Gradient はテンプレートの子ではなく、テンプレートの子のプロパティの値であるため、これは機能しません。したがって、名前でアクセスして、その値Pathを変更できます。Fillただし、グラデーションがフリーズしている可能性があることに注意してください。そのためにバインディングと DataContext を使用しないのはなぜですか? または、依存関係プロパティを使用して色を直接変更し、TemplateBinding のみを使用することをお勧めします。より少ない作業で、それを処理するためのはるかに優れた方法です。Controlまた、Thumb 要素は要素を移動するために使用され、要素がより適切な基本クラスになる必要がない場合は、そのためのマウス処理をカプセル化します。パフォーマンスが必要な場合VisualContainerVisual、はるかに優れていますが、非常に制限されています。

于 2012-12-08T03:04:49.747 に答える