如何以編程方式將事件處理程序添加到僅存在於另一個對象的ControlTemplate中的對象?如何將事件處理程序添加到ControlTemplate中的對象
我使用Silverlight 4.我想從第三方DLL(Liquid)中使用控件ColorSelector。它看起來像組合框,但實現方式不同。 (當沒有系統組合框時,它可能是針對Silverlight的舊版本的。)ColorSelector類派生自ContentControl,其外觀是使用xaml文件中定義的ControlTemplate實現的。
事實上,它是一個看起來像組合框的控件,但編程上它的對象不是從組合框派生的。現在我卡住了,因爲我想以編程方式訪問我可以在屏幕上看到的組合框對象。通常,如果它是一個真正的標準組合框,我將使用事件DropDownOpened和DropDownClosed來分別知道該框何時顯示和隱藏。但是這個顏色選擇器不提供這些事件。但它使用ControlTemplete將ColorSelector的外觀定義爲DropDown對象。 DropDown類是來自同一個dll的另一個類,它的外觀也由它的ControlTemplate定義,這就是那個神祕的類似combobox的外觀所基於的地方。我現在完全被這個困惑了。
如何以編程方式訪問這些可在屏幕上看到但不直接出現在代碼中的視覺控件?下面是一個簡單的例子:
class ColorSelector : LiquidControl
class LiquidControl : ContentControl
<Style TargetType="local:ColorSelector">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ColorSelector">
<local:DropDown x:Name="RootElement">
.....
</local:DropDown>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
class DropDown : LiquidControl
<Style TargetType="local:DropDown">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:DropDown">
<Grid x:Name="RootElement">
<Button x:Name="ElementButton">
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
現在,我在我的代碼(new ColorControl()
)創建一個新的ColorControl,然後我想訪問下拉的模板定義的按鈕。怎麼做?
您是否試圖使用Blend提取模板? – NestorArturo
我不明白你的意思。 (請注意,我有完整的源代碼。)如何通過程序訪問模板中定義的可視化控件來幫助我? –