2015-10-14 52 views
0

我有一个wpf应用程序,我在App.xaml中有ControlTemplate。这个ControlTemplate包含Grid和Canvas。通过c访问ControlTemplate xaml内的元素#

<Application.Resources> 
    <ControlTemplate x:Key="PinTemplate" TargetType="m:Pushpin"> 
     <Grid x:Name="grid2" HorizontalAlignment="left" VerticalAlignment="Center" > 
      <Canvas x:Name="ContentPopup" Visibility="{TemplateBinding Visibility}"> 
       <StackPanel x:Name="stackPanel1" Canvas.Left="0" Canvas.Top="-20" Visibility="{TemplateBinding Visibility}"> 
        <ContentPresenter HorizontalAlignment="Center" 
                  VerticalAlignment="Center" 
                  Content="{TemplateBinding Content}" 

                  Margin="0" TextBlock.FontFamily="Segoe UI" TextBlock.FontWeight="Bold" TextBlock.FontSize="10" TextBlock.Foreground="Blue"> 
        </ContentPresenter> 
       </StackPanel> 
      </Canvas> 
      <Canvas> 
       <Ellipse Name="Ellips12" Fill="AliceBlue" Opacity="0.7" Stroke="Red" StrokeThickness="2" Height="25" Stretch="Fill" Canvas.Top="5" Width="25"  /> 
       <TextBlock Text="{TemplateBinding ContentStringFormat }" TextBlock.Foreground="Blue" FontSize="13" TextBlock.TextAlignment="Right" Margin="10,7,10,0"> 
       </TextBlock> 
      </Canvas> 
     </Grid> 
    </ControlTemplate> 
</Application.Resources> 

我需要帮助从mainWindow.xaml.cs访问此ControlTemplate中的网格和Canvas。 我想在PropertyChanged或ViewChangeEnd事件时更改属性“可见性”。

,我已经尝试过,但没有奏效。

 ControlTemplate ct = Application.Current.Resources["PinTemplate"] as ControlTemplate; 
     Grid gr = ct.Resources["grid2"] as Grid; 
     gr.Visibility = Visibility.Collapsed; 

即使这样

ControlTemplate ct = Application.Current.Resources["PinTemplate"] as ControlTemplate; 
     Grid gr = ct.FindName("grid2", this) as Grid; 

回答

0

ControlTemplate.FindName返回模板上的控制应用后才能的项目。如果你在UserControl这样做,你可以通过覆盖OnApplyTemplate来得到它。或者,如果你在UserControl之外,你可以使用Control.Loaded Event来获得相同的:) 希望它有帮助:)

+0

你是说我应该先载入ControlTemplate?像这样ct.LoadContent(); –

+0

不,尝试在UserControl.Loaded事件(应用到的UserControl)上查找 – faztp12