如何在内容模板中获取子UI元素? [英] How to get child UI elements in a content template?

查看:59
本文介绍了如何在内容模板中获取子UI元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我定义了一个类似于以下内容的ContentTemplate:

< ControlTemplate x:Key =" myTemplate"> 
< Button Style =" {StaticResource myStyle}">
< StackPanel>
< TextBlock Name =" tbText"文本= QUOT;&的text1 QUOT;的Horizo​​ntalAlignment = QUOT;中心" Style =" {StaticResource bigprintStyle}" />
< TextBlock Name =" tbCode"文本= QUOT;(代码1)"的Horizo​​ntalAlignment = QUOT;中心" Style =" {StaticResource mediumprintStyle}" />
< / StackPanel>
< / Button>
< / ControlTemplate>

在面板中,我使用上面这样的模板:

< WrapPanel名称= QUOT; pnlCodes" ButtonBase.Click = QUOT; btnReasonCode_Click"的Horizo​​ntalAlignment = QUOT;左"余量= QUOT; 2,3,0,3" VerticalAlignment = QUOT;拉伸" MaxWidth = QUOT; 910" ClipToBounds = QUOT;真"> 
< Button Name =" btn1" Template =" {StaticResource myTemplate}">
< / Button>
< Button Name =" btn2" Template =" {StaticResource myTemplate}">
< / Button>
< Button Name =" btn3" Template =" {StaticResource myTemplate}">
< / Button>
< Button Name =" btn4" Template =" {StaticResource myTemplate}">
< / Button>
< / WrapPanel>




在我的代码中,n返回0,即没有元素。

 foreach(pnlCodes.Children中的按钮btn)
{
int n = VisualTreeHelper.GetChildrenCount(btn);
System.Collections.IEnumerable ie = LogicalTreeHelper.GetChildren(btn);
foreach(对象obj in ie)
{
if(obj is DependencyObject)
{
i ++;
}
}
}

如何在按钮内获取我的两个TextBlocks(tbText和tbCode)  ?


提前致谢!!!

解决方案

我发现了问题所在。当我试图获取模板子项时,主窗口没有完全加载。


I defined a ContentTemplate like the following:

        <ControlTemplate x:Key="myTemplate">
            <Button Style="{StaticResource myStyle}">
                <StackPanel>
                    <TextBlock Name="tbText" Text="text1" HorizontalAlignment="Center" Style="{StaticResource bigprintStyle}" />
                    <TextBlock Name="tbCode" Text="(code1)" HorizontalAlignment="Center" Style="{StaticResource mediumprintStyle}" />
                </StackPanel>
            </Button>
        </ControlTemplate>

In the panel, I use the above template like this:

                                <WrapPanel Name="pnlCodes" ButtonBase.Click="btnReasonCode_Click" HorizontalAlignment="Left" Margin="2,3,0,3" VerticalAlignment="Stretch" MaxWidth="910" ClipToBounds="True">
                                    <Button Name="btn1" Template="{StaticResource myTemplate}">
                                    </Button>
                                    <Button Name="btn2" Template="{StaticResource myTemplate}">
                                    </Button>
                                    <Button Name="btn3" Template="{StaticResource myTemplate}">
                                    </Button>
                                    <Button Name="btn4" Template="{StaticResource myTemplate}">
                                    </Button>
                                </WrapPanel>


In my code, n returns 0 and ie has no element either.

                foreach (Button btn in pnlCodes.Children)
                {
                    int n = VisualTreeHelper.GetChildrenCount(btn);
                    System.Collections.IEnumerable ie = LogicalTreeHelper.GetChildren(btn);
                    foreach (object obj in ie)
                    {
                        if (obj is DependencyObject)
                        {
                            i++;
                        }
                    }
                }

How do I get my two TextBlocks(tbText and tbCode) inside the Button?

Thanks in advance!!!

解决方案

I found out the problem. When I tried to get the template children, the main window is not fully loaded.


这篇关于如何在内容模板中获取子UI元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆