2017-03-28 8 views
1

CalendarView要素を継承するXAML UserControlがあります。 CalendarViewItemStyleでは、GridとTextBoxを保持するためにControlTemplateを編集しました。UWP ControlTemplateの要素またはコントロールへのアクセス

<Style x:Name="CalDayStyle" 
      TargetType="CalendarViewDayItem"> 
     <Setter Property="Background" 
       Value="Transparent" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate x:Name="cTemp"> 
        <Grid x:Name="RootGrid" 
          Background="{TemplateBinding Background}"> 
         <StackPanel x:Name="CalDayStack" 
            Orientation="Vertical" 
            VerticalAlignment="Stretch"> 
          <TextBlock x:Name="tasksPres" 
             TextAlignment="Center" 
             HorizontalAlignment="Stretch"> 

          </TextBlock> 
         </StackPanel> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

TextBoxにアクセスしようとしていますが、FindName()を使用していません。私は何をしますか。

+0

'UserControl'からのその値 – AVK

答えて

0

FindNameは、適用されたテンプレートで定義された名前を見つけることができません。適用されたテンプレートの項目を検索するには、VisualTreeHelper.GetChildを使用して、適用されたテンプレートのルートオブジェクトを取得します。次に、そのルートオブジェクトでFindNameを呼び出すと、大きなページではなく、テンプレートのXAMLネームスコープが検索されます。

あなたStyleTextBlockを取得したい場合、あなたはそれを得ることがVisualTreeHelper touseことができるはずです。

examoleについては

:私はちょうどそのようTextBlockのデータを取得することができ、あなたが `DependancyObject`を作成する必要があると思うし、次にあなたが得ることができるように` TextBlock`テキストにそれを結合しない

public MainPage() 
{ 
    this.InitializeComponent(); 
    texts = new List<TextBlock>(); 
} 

private List<TextBlock> texts; 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    IEnumerable<TextBlock> textBlocks = FindVisualChildren<TextBlock>(Mycontrol); 
    foreach (var textBlock in textBlocks) 
    { 
     if (textBlock.Name == "tasksPres") 
     { 
      texts.Add(textBlock); 
     } 
    } 
    foreach (var item in texts) 
    { 
     item.Text = "11111111111"; 
    } 
} 

private static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       yield return (T)child; 
      } 

      foreach (T childOfChild in FindVisualChildren<T>(child)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 
} 
関連する問題