簡體   English   中英

以編程方式訪問ControlTemplate的給定子級

[英]Accessing a given child of a ControlTemplate programmatically

我有一個ControlTemplate,其中包含我希望能夠以編程方式訪問的內容(在這種情況下為漸變),經過數小時的反復試驗后,我覺得現在終於該向您尋求幫助了,StackOverflow。

模板生成一朵花,我不知道該用什么,所以我選擇了Thumb-element,因為我以前以類似的方式使用過它。 如果您能想到其他更適合的方法,請告訴我。

無論如何,這是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中創建屏幕外的花朵,並在后面的代碼中引用該花朵,因為它可以:/

提前致謝!

那是行不通的,因為Gradient不是模板的子級,它的值是模板的子級的屬性。 因此,您可以按名稱訪問Path ,並修改其“ Fill值。 但是請記住,漸變可能已凍結。 為什么不為此使用綁定和DataContext? 更好的是,使用依賴項屬性直接修改顏色,而僅使用TemplateBinding。 用更少的工作,這將是一個更好的方法。 Thumb元素也用於移動元素,並且如果不需要Control元素是更好的基類,則它封裝了鼠標處理。 如果您想要性能, VisualContainerVisual會更好,但也非常有限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM