标签:c wpf datatemplate itemtemplate
我有一个FlipView控件,其DataTemplate定义如下:
<FlipView x:Name="FlipView5Horizontal" Width="480" Height="270" BorderBrush="Black" BorderThickness="1" Style="{StaticResource FlipViewStyle1}">
<FlipView.ItemTemplate>
<DataTemplate>
<Grid>
<Image Width="480" Name="xxxImage" Height="270" Source="{Binding Image}" Stretch="UniformToFill"/>
<Border Name="xxxBorder" Background="#A5000000" Height="80" VerticalAlignment="Bottom">
<TextBlock Name="xxxTB" Text="{Binding Title}" FontFamily="Segoe UI" FontSize="26.667" Foreground="#CCFFFFFF" Padding="15,20"/>
</Border>
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
在我的代码后面,我需要访问名为“xxxTB”的TextBlock.这是我的代码:
public 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;
}
}
}
}
public void TestMethod()
{
foreach (var item in FindVisualChildren<TextBlock>(this))
{
if (timeLine.Name == "xxxTB")
{ }
}
}
但是,当它在VisualTree中找到FlipView时,它从:for(int i = 0; i< VisualTreeHelper.GetChildrenCount(depObj); i)返回,因为VisualTreeHelper.GetChildrenCount(depObj)不返回任何内容. 任何的想法?
解决方法:
试试这个
ContentPresenter cp = GetFrameworkElementByName<ContentPresenter>(FlipView5Horizontal);
DataTemplate dt = FlipView5Horizontal.ItemTemplate;
TextBlock l = (dt.FindName("xxxTB", cp)) as TextBlock;
private static T GetFrameworkElementByName<T>(FrameworkElement referenceElement) where T : FrameworkElement
{
FrameworkElement child = null;
for (Int32 i = 0; i < VisualTreeHelper.GetChildrenCount(referenceElement); i++)
{
child = VisualTreeHelper.GetChild(referenceElement, i) as FrameworkElement;
System.Diagnostics.Debug.WriteLine(child);
if (child != null && child.GetType() == typeof(T))
{
break;
}
else if (child != null)
{
child = GetFrameworkElementByName<T>(child);
if (child != null && child.GetType() == typeof(T))
{
break;
}
}
}
return child as T;
}
标签:c,wpf,datatemplate,itemtemplate 来源: https://codeday.me/bug/20190609/1202036.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。