【问题标题】:Can't find child control in template在模板中找不到子控件
【发布时间】:2016-03-10 19:51:25
【问题描述】:

我有一个这样的控件:

<Grid DataContext="{Binding RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type controls:MyControl}}}">
<telerik:RadComboBox 
    x:Name="radComboBox1"
    Margin="0,5,5,5">
    <telerik:RadComboBox.Items>
        <telerik:RadComboBoxItem>
            <telerik:RadComboBoxItem.Template>
                <ControlTemplate>
                    <telerik:RadGridView
                        x:Name="radGridView1"
                        ItemsSource="{Binding GridItemsSource}"
                        AutoGenerateColumns="False"
                        SelectedItem="{Binding SelectedGridItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                    </telerik:RadGridView>
                </ControlTemplate>
            </telerik:RadComboBoxItem.Template>
        </telerik:RadComboBoxItem>
    </telerik:RadComboBox.Items>
</telerik:RadComboBox>

当我尝试访问子控件 radGridView1 时

Dim item = radComboBox1.Items(0) 
Dim gr As RadGridView = item.Template.FindName("radGridView1", item) 

gr 为空

为什么在 comboboxItem 中找不到 radGrid1 ?

谢谢

【问题讨论】:

  • 无论你想做什么,使用 DataBinding 而不是过程代码。
  • 我认为您需要先在 radComboBox1 上致电 ApplyTemplate()

标签: c# .net wpf xaml code-behind


【解决方案1】:

请注意,在我的回答中,我从您的上一个问题链接...:

TextBox textBox = (TextBox)control.Template.FindName("Address", control);

...control 是一个实际控件,而不是您从ComboBox.Items 获得的数据项。您可以使用 ItemContainerGenerator.ContainerFromItem Method 从您的数据项中获取实际的 ComboBoxItem,如下所示:

ComboBoxItem control = radComboBox1.ItemContainerGenerator.ContainerFromItem(item);

然后您可以从中访问ControlTemplate 生成的项目。

【讨论】:

  • ...但是您应该改用 DataBinding ..(不要忘记提及它;))
  • 哈哈……是的,伙计……我看到你已经这样做了。 :)
猜你喜欢
  • 1970-01-01
  • 2018-07-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 2022-08-15
  • 1970-01-01
  • 2012-10-09
相关资源
最近更新 更多