[英]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
元素是更好的基類,則它封裝了鼠標處理。 如果您想要性能, Visual
或ContainerVisual
會更好,但也非常有限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.