コードビハインドを使用して XAML で定義された ResouceDictionary があります。マウス イベントとデータ バインディングを使用して、ビュー固有の動作をいくつか定義する必要があります。そのためには、DataTemplate 内で定義されたいくつかの要素にアクセスする必要があります。
問題は、DataTemplate に Key がなく、TargetType しかないことです (これは、WPF が特定の型に自動的に使用するために必要です)。
では、分離コードから DataTemplate にアクセスするにはどうすればよいでしょうか?
編集:
コンストラクターのどこかにブレークポイントを配置すると、ViewModel のテンプレートがそこにあることがわかります。ResourceDictionary.Keys プロパティはオブジェクトの配列であり、アクセスしたいキー (または実際には対応する値) はデバッガーでは次のようになります。
{DataTemplateKey(Company.Application.ViewModels.TargetViewModel)}
XAML:
<sys:Double x:Key="escala">10</sys:Double>
<sys:Double x:Key="raio">20</sys:Double>
<EllipseGeometry x:Key="geometriacirculo"
RadiusX="{StaticResource raio}"
RadiusY="{StaticResource raio}"/>
<ScaleTransform x:Key="transform" ScaleX="{StaticResource escala}" ScaleY="{StaticResource escala}" />
<ap:NormalConverter x:Key="NormalConverter"/>
<ap:BitmapToSource x:Key="BitmapToSource"/>
<DataTemplate DataType="{x:Type vm:TelaColetaViewModel}">
<.....
分離コード:
public partial class TelaColetaTemplate : ResourceDictionary
{
EllipseGeometry _geometria_circulo;
ScaleTransform _scale_transform;
Grid GridZoom;
Path CirculoGuia;
double _escala;
Point? _ponto_clicado_norm;
public TelaColetaTemplate()
{
InitializeComponent();
// three following lines work, accessing them with key, no problem
_geometria_circulo = (EllipseGeometry)this["geometriacirculo"];
_scale_transform = (ScaleTransform)this["transform"];
_escala = (double)this["escala"];
//var wantedTemplate = ????
......