C#中如何获取ItemsControl的DataTemplate中定义的控件?
来源:互联网 发布:网络销售的优势和劣势 编辑:程序博客网 时间:2024/05/07 15:57
开发环境:VisualStudio2010 +Silverlight4
新建一个test.xaml,并添加ComboBox组合框控件,其Xaml代码如下:
- <ComboBox x:Name="cmbBoxCategory" Height="28" Margin="105,69,182,0" VerticalAlignment="Top" SelectionChanged="cmbBoxCategory_SelectionChanged" DataContext="{StaticResource SharingObjectCategoryDataSource}" ItemsSource="{Binding CategoryCollection }" >
- <ComboBox.ItemTemplate>
- <DataTemplate x:Name="cmbTemplate">
- <StackPanel Orientation="Horizontal">
- <TextBox x:Name="txtID" Text="{Binding Path=ID}"/>
- <Image Source="{Binding Path=ImagePath}"/>
- <TextBlock x:Name="tbCategoryName" Text="Name"/>
- </StackPanel>
- </DataTemplate>
- </ComboBox.ItemTemplate>
- </ComboBox>
那么我们如何获取DataTemplate中的名为txtID的TextBox控件或者其它控件呢?
在test.xaml.cs文件中不能够直接引用名为txtID的TextBox控件,即this.txtID是不能访问的,因为txtID只属于DataTemplate模板的名称空间范围内(类似于参数的作用域),可参看Silverlight4文档的TemplatePartAtrribute。我们如何获得DataTemplate的TextBox控件呢?可用如下方式获得:
方法一:
- TextBox txtBox = (TextBox)VisualTreeHelper.GetChild(this.cmbTemplate.LoadContent(), 0);
- // this.cmbTemplate.LoadContent()是获取cmbTemplate名的DataTemplate的内容,该例中获
- //得的是StackPanel,再通过VisualTreeHelper.GetChild()方法获得属于该StackPanel的控件,
- //可参看Silverlight4文档的LoadContent()方法的使用
方法二:
- StackPanel panel = (StackPanel)this.cmbTemplate.LoadContent();
- TextBlock tbCategory=panel.FindName("tbCategoryName") as TextBlock;
- //可参看Silverlight4文档的FindName()方法的使用
对于
TextBox txtBox = (TextBox)VisualTreeHelper.GetChild(this.cmbTemplate.LoadContent(), 0);
因为它的Text的值是绑定数据源的ID属性(如:{Binding Path=ID}),通过程序运行动态生成的值,因此通过这两种方式获得的TextBox的Text是空值,而对于tbCategoryName名的TextBlock,因为它的Text值是固定的“Name”字符串,因此通过这两种方法获得的TextBlock的Text值为“Name”。
如果我们想获得选中的ComboBoxItem的TextBox的值或者Image的Source值,则可通过如下方式获得:
- //test.xaml.cs代码
- private void cmbBoxCategory_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (this.cmbBoxCategory.SelectedItem!=null)
- {
- ComboBox item = sender as ComboBox;
- Category cat = (Category)this.cmbBoxCategory.SelectedItem;
- //Category类为cmbBoxCategory组合框绑定的数据源类,然后再通过cat获取该类中的ImagePath属性即可
- this.imgObject.Source = new BitmapImage(new Uri(cat.ImagePath, UriKind.Relative));
- //imgObject为test.xaml中的一个Image控件
- }
- }
可能有更好的方法获得绑定数据源时动态生成的值,本人不才,还未想出该方法,可讲究用上面的方法获得,如果找到了相应方法就做更新。
原出处:http://blog.csdn.net/wackelbh/article/details/6003947#comments
- C#中如何获取ItemsControl的DataTemplate中定义的控件?
- 获取ItemsControl里面的控件
- WPF 获取 ListView DataTemplate 中控件值
- WPF中如何使用C#创建DataTemplate数据模版
- WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探
- C#的线程中如何操作控件?
- 如何在C#中处理COM中定义的通知
- 如何在DataTemplate中处理事件Events
- Javascript中控件的定义
- Javascript中控件的定义
- aspx如何获取aspx.cs中定义的变量、方法;
- 如何获取一个未在php中定义的类
- 使用PHP如何获取WSDL中定义的方法列表
- ECMAScript中关于如何获取this的定义
- Windows Phone 8.1中数据显示控件基石------ItemsControl
- 如何在C#中定义动态的数组结构啊??
- C#中类的定义
- WPF 点击 datatemplate 里面的控件,获取相应绑定的数据
- spring security对用户名和密码的校验过程
- 开发笔记-(代码编写风格及const理解)
- Mixing digital audio
- 设计一个类,我们只能生成该类的一个实例。
- 用 Eclipse 建立 JAVA Web Service 教學
- C#中如何获取ItemsControl的DataTemplate中定义的控件?
- SQL Server自定义函数
- SQL工作杂记
- (C#)路径/文件/目录/I/O常见操作汇总
- DES ECB CBC and 3DES
- 创建IO时的参考特征
- jQuery.getJSON 读取数组的两种方式
- 糗大了:奥巴马竞争对手Romney大购Twitter僵尸粉被发现
- Java Oracle驱动包