/ / Finden Sie ein ControlTemplate aus code - c #, wpf, xaml, controltemplate

Suchen Sie ein ControlTemplate aus dem Code - c #, wpf, xaml, controltemplate

Ich habe eine XAML-Datei mit diesem Code:

<GridViewColumn x:Name="lvCol3"
Header="Quantità"
Width="120">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Control x:Name="host">
<Control.Template>
<ControlTemplate>
<TextBlock Text="{Binding Path=Entity.Quantita}" />
</ControlTemplate>
</Control.Template>
</Control>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"
Value="True">
<Setter TargetName="host" Property="Template">
<Setter.Value>
<ControlTemplate x:Name="myControlTemplate" />
</Setter.Value>
</Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>

Ich würde es schaffen myControlTemplate vom Code hinter, um ein anderes UI-Objekt zuzuweisen.

Ich versuche zu benutzen FindResource aber es funktioniert nicht. Wie kann ich das tun?

Antworten:

3 für die Antwort № 1

Am einfachsten ist es wahrscheinlich, Ihre ControlTemplate in eine Ressource zu extrahieren. Dann können Sie FindResource verwenden.

Etwas wie das:

<UserControl>
<UserControl.Resources>
<ControlTemplate x:Key="MyControlTemplate">
<TextBlock
Text="{Binding Path=Entity.Quantita}"/>
</ControlTemplate>
</UserControl.Resources>

...

<GridViewColumn
x:Name="lvCol3"
Header="Quantità"
Width="120">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Control x:Name="host" Template="{StaticResouce MyControlTemplate}">
</Control>
</GridViewColumn.CellTemplate>
</GridViewColumn>

...
</UserControl>

Dann können Sie im Code für Ihr UserControl (oder was auch immer das Wurzelelement ist) tun

var resource = FindResource("MyControlTemplate") as ControlTemplate;