首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

WPF如何获取模板控件啊试很多次了

2013-01-08 
WPF怎么获取模板控件啊,试很多次了最近用wpf做东西,在datagrid模板里面嵌入combobox combobox绑定数据库然

WPF怎么获取模板控件啊,试很多次了
最近用wpf做东西,在datagrid模板里面嵌入combobox combobox绑定数据库然后进行过滤,但是我想要获取cmobobox控件,始终都娶不到,网上很多办法都不能用啊,经常提示未设置对象或者下标不对,不知道什么问题,麻烦帮忙看看。谢谢。。模板代码


                                    <DataGridTemplateColumn Header="设备类型">
                                        <DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate>
                                                <TextBlock Text="{Binding Path=name}" x:Name="tb" />
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>
                                        <DataGridTemplateColumn.CellEditingTemplate>
                                            <DataTemplate x:Name="cmbTemplate">

                                                    <ComboBox x:Name="taskCombo" ItemsSource="{Binding Source={StaticResource nameEnum}}"  SelectedItem ="{Binding Path=name}"  IsSynchronizedWithCurrentItem="False" />
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellEditingTemplate>
                                    </DataGridTemplateColumn>


请问怎么获取名为 taskCombo控件,网上不准啊
------解决方案--------------------


在你的ComboBox中添加 Loaded 事件:


<ComboBox x:Name="taskCombo" Loaded="taskCombo_Loaded"/>


后台代码:

private void taskCombo_Loaded(object sender, RoutedEventArgs e)
{
    //sender就是你的ComboBox
    ComboBox MyComboBox = (ComboBox)sender;
}

[解决办法]
 public List<T> GetChildObjects<T>(DependencyObject obj, string name) where T : FrameworkElement
        {
            DependencyObject child = null;
            List<T> childList = new List<T>();
            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            {
                child = VisualTreeHelper.GetChild(obj, i);
                if (child is T && (((T)child).Name == name 
[解决办法]
 string.IsNullOrEmpty(name)))
                {
                    childList.Add((T)child);
                }
                childList.AddRange(GetChildObjects<T>(child, ""));
            }
            return childList;
        }

这是方法
  List<Combobox > collection = GetChildObjects<CheckBox>(datagrid1, "Combobox ");
这里得到了所有的 datagrid里面的 combox ,遍历一下找到你需要的combox

热点排行