リソース ディクショナリ ファイルで次のようにControlTemplate
定義しています。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="ctlTemplate">
<ControlTemplate.Resources>
<StackPanel x:Key="sp" x:Name="sp">
<TextBlock Name="tplTextBlock" HorizontalAlignment="Center"/>
<DataGrid Name="tableBlock" AutoGenerateColumns="False"/>
</StackPanel>
</ControlTemplate.Resources>
</ControlTemplate>
</ResourceDictionary>
から派生したクラスがあり、そのプロパティを上記Thumb
に設定しようとしています:Template
ControlTemplate
Dim ct As ControlTemplate = CType(Application.Current.Resources("ctlTemplate"), ControlTemplate)
Dim tb As MovableTableBlock = New MovableTableBlock 'Derives from Thumb
tb.Template = ct
tb.UpdateLayout()
問題は、Thumb
がまったくレンダリングされないことです。ただし、ControlTemplate.Resources
タグを削除した結果、のx:Key
プロパティも削除するとStackPanel
、Thumb
レンダリングされます。x:Key
のプロパティを設定する理由は、との子StackPanel
にアクセスして、それぞれテキストとデータ バインディングを設定するためです。基本的に、の子にアクセスしたいだけです。どうすればアクセスできますか?TextBlock
DataGrid
StackPanel
編集:私はこれに変更ControlTemplate
しました:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:VQ.Custom">
<Style TargetType="{x:Type local:MovableTableBlock}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MovableTableBlock}">
<StackPanel x:Name="sp">
<TextBlock x:Name="tplTextBlock" HorizontalAlignment="Center"/>
<DataGrid x:Name="tableBlock" AutoGenerateColumns="False"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
したがって、次のようにテンプレートを設定する必要はありません。
tb.Template = ct
これでレンダリングされましたが、ここでThumb
提案されているように、まだ内部コントロールにアクセスできません。何らかの理由で、私がこれを行うときです:tb.Template
Nothing
Dim txtBlock As TextBlock = CType(tb.Template.FindName("tplTextBlock", tb), TextBlock)