如何访问ItemTemplate中的控件

时间:2014-02-26 09:42:38

标签: c# wpf windows-phone-8

使用Windows Phone 8,C#。

我所做的基本上是编辑了枢轴项目。我已将其命名为MainPivot,并在其中编辑了数据透视项目标题,并在其中添加了一个名为TextBlock的{​​{1}}。 XAML就是:

PivotTitletxt

如何访问此内容,例如设置不透明度或更改前景时?这样我就可以在我的主页上使用它,例如PivotTitletxt.Opacity = 30; ...

谢谢!

1 个答案:

答案 0 :(得分:1)

链接@Sankarann给了你一个很好的例子。

我会试着把它放在你的场景中:

您的MainPivot有PivotItems吗?那么你在Loaded事件上要做的就是:

var _mainPivot = MainPivot as Pivot
foreach (var _pivotItem in _mainPivot.Items)
{
var _container = _mainPivot.ItemContainerGenerator.ContainerFromItem(_pivotItem);
var _children = AllChildren(_container)
var _name = "PivotTitletxt";
var _control = (TextBlock)_Children.first(x=>x.Name == _name);
_control.Opacity  = 30;

} 

然后完全按照站点中的方式复制AllChildren方法。

上面的代码,可能会有一些调整,因为我没有VS ...

希望它有所帮助。

此致

============新答案==============

Find all controls in WPF Window by type

public 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;
            }
        }
    }
}

然后尝试:

TextBlock xx = FindVisualChildren<TextBlock>(mainPivot).FirsOrDefault(x=>x.name=="PivotTitletxt");

if(xx!=null)
xx.opacity = 30

再一次,这可能需要一些修正......我正在做这件事,没有VS.

试一试