2015-10-14 53 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