他のオブジェクトのControlTemplateにのみ存在するオブジェクトにイベントハンドラをプログラムで追加する方法はありますか。ControlTemplateのオブジェクトにイベントハンドラを追加する方法
私はSilverlight 4で動作します。私は、コントロールのColorSelectorをサードパーティのDLL(Liquid)から使いたいと思います。コンボボックスのように見えますが、実装方法が異なります。 (システムコンボボックスがなかった場合はSilverlightの旧バージョン用に作成された可能性があります)。ColorSelectorクラスはContentControlから派生し、その外観はxamlファイルで定義されたControlTemplateを使用して実装されます。
実際、それはコンボボックスのように見えるが、プログラム上、そのオブジェクトはコンボボックスから派生しないコントロールです。そして、私は画面上で見ることができるコンボボックスオブジェクトにプログラム的にアクセスしたいので、今私は立ち往生しています。通常、それが実際の標準ComboBoxの場合、DropDownOpenedイベントとDropDownClosedイベントを使用して、ボックスがいつ表示され、非表示になっているかを知ることができます。しかし、このカラーセレクタはこれらのイベントを提供しません。しかし、ColorSelectorの外観をDropDownオブジェクトとして定義するControlTempleteを使用します。そのDropDownクラスは、同じdllの別のクラスであり、その外観もControlTemplateによって定義されています。それは、その不思議なコンボボックスのような外観が基づいています。そして、私は今これで全然混乱しています。
画面に表示されているがコードに直接表示されていないこれらのビジュアルコントロールに、プログラムでどのようにアクセスできますか?ここでは簡単な一例である:
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
何を意味するのか分かりません。 (私は完全なソースコードを持っていることに注意してください)テンプレートで定義されたビジュアルコントロールへのプログラム的なアクセスはどうすればこのことができますか? –