Найти шаблон ControlTemplate из кода - PullRequest
2 голосов
/ 28 октября 2009

У меня есть файл xaml с этим кодом:

<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>

Я бы управлял myControlTemplate из кода, чтобы назначить другой объект пользовательского интерфейса.

Я пытаюсь использовать FindResource, но это не работает. Как я могу это сделать?

1 Ответ

3 голосов
/ 28 октября 2009

Вероятно, самый простой способ - извлечь ваш ControlTemplate в ресурс: тогда вы можете использовать FindResource.

Примерно так:

<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>

Затем в коде для вашего UserControl (или любого другого корневого элемента) вы можете сделать

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