WPF,这个子元素如何查找? http://blog.csdn.net/duanzi_peng/article/details/17094639获取子元素方法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你说的这些方法,不适用于本问题的哦.............你想做什么操作?问题描述的很清楚啊,不知阁下是否动手操作过没有。你能找到数据模板中的CheckBox元素吗? 要找到数据模板中的CheckBox元素,可以用DataTemplate.FindName(string name, FrameworkElement parent)方法。但是,不建议直接操作CheckBox元素,因为DataGrid一般会启用虚拟模式。而在虚拟模式下,当前没有显示的单元格,可以不用实例化模板(节省内存)。如果具体某个单元格的模板不实例化,你就没有办法操纵该单元格的CheckBox元素。正确的办法是操纵数据,而不是去操纵模板元素。比如下面的例子:在窗口空白部分单击左键,会用DataTemplate.FindName来反选Checkbox,当数据比较多的时候,你会发现它只改变一部分。在窗口空白部分单击右键,会对绑定数据进行反选,你会发现它代码简单,却可以正确地更新所有数据和UI。<Window x:Class="WPF1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MouseLeftButtonDown="Window_MouseLeftButtonDown" MouseRightButtonDown="Window_MouseRightButtonDown" Title="MainWindow" Height="350" Width="525"> <Grid HorizontalAlignment="Left" Width="596"> <DataGrid Name="datagrid1" Margin="123,78,81,158" AutoGenerateColumns="False" Height="131"> <DataGrid.Columns> <DataGridTemplateColumn Width="80" Header="序号"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid Width="50" Margin="0 0 25 0"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="auto"/> </Grid.ColumnDefinitions> <TextBlock HorizontalAlignment="Right" Text="{Binding Name}"/> <CheckBox Name="PART_XhCheckBox" Grid.Column="1" Margin="5 1.5 0 0" IsChecked="{Binding Valid}" /> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid></Window>namespace WPF1{ /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); for (int i = 0; i < 40; i++) { list.Add(new My() { Name = "张三" + i }); } this.datagrid1.ItemsSource = list; } ObservableCollection<My> list = new ObservableCollection<My>(); private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // 寻找PART_XhCheckBox,并进行反选。对某些不可见单元格可能无效 DataGridTemplateColumn column = this.datagrid1.Columns[0] as DataGridTemplateColumn; foreach (var item in this.datagrid1.Items) { var element = column.GetCellContent(item); if (element != null) { CheckBox cb = column.CellTemplate.FindName("PART_XhCheckBox", element) as CheckBox; cb.IsChecked = !cb.IsChecked; } } } private void Window_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { // 操纵数据,直接进行反选 foreach (My my in list) { my.Valid = !my.Valid; } } } class My : INotifyPropertyChanged { string name; public string Name { get { return name; } set { name = value; FirePropertyChanged("Name"); } } bool valid; public bool Valid { get { return valid; } set { valid = value; FirePropertyChanged("Valid"); } } public event PropertyChangedEventHandler PropertyChanged; void FirePropertyChanged(string propertyName) { var propertyChanged = this.PropertyChanged; if (propertyChanged != null) propertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }} 9楼例子请加上如下改变,手动选择才更新到绑定数据。<CheckBox Name="PART_XhCheckBox" Grid.Column="1" Margin="5 1.5 0 0" IsChecked="{Binding Valid, UpdateSourceTrigger=PropertyChanged}" /> PictureBox图片尺寸拉伸问题 有象word绘图中绘自由曲线的那种控件吗(C#中使用)? 请问兄弟们一个gridview问题 探讨C#多线程更新控件内容,值的一看 代码,大家看看啊,是什么地方有问题的啊 用C#做WebForm的时候如何让用户提示输入 XML 解析的问题 一个关于多线程同步的问题 关于outlook2003的插件 这怎么就错了,打不开选择文件的窗口??? 泛型类不能正确映射的问题 请高人指点,如何改变dataGrid单元格字体颜色
你想做什么操作?
问题描述的很清楚啊,不知阁下是否动手操作过没有。你能找到数据模板中的CheckBox元素吗?
在窗口空白部分单击左键,会用DataTemplate.FindName来反选Checkbox,当数据比较多的时候,你会发现它只改变一部分。
在窗口空白部分单击右键,会对绑定数据进行反选,你会发现它代码简单,却可以正确地更新所有数据和UI。<Window x:Class="WPF1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MouseLeftButtonDown="Window_MouseLeftButtonDown"
MouseRightButtonDown="Window_MouseRightButtonDown"
Title="MainWindow" Height="350" Width="525">
<Grid HorizontalAlignment="Left" Width="596">
<DataGrid Name="datagrid1" Margin="123,78,81,158" AutoGenerateColumns="False" Height="131">
<DataGrid.Columns>
<DataGridTemplateColumn Width="80" Header="序号">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Width="50" Margin="0 0 25 0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Right" Text="{Binding Name}"/>
<CheckBox Name="PART_XhCheckBox" Grid.Column="1" Margin="5 1.5 0 0" IsChecked="{Binding Valid}" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>namespace WPF1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); for (int i = 0; i < 40; i++)
{
list.Add(new My() { Name = "张三" + i });
}
this.datagrid1.ItemsSource = list; }
ObservableCollection<My> list = new ObservableCollection<My>(); private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 寻找PART_XhCheckBox,并进行反选。对某些不可见单元格可能无效
DataGridTemplateColumn column = this.datagrid1.Columns[0] as DataGridTemplateColumn;
foreach (var item in this.datagrid1.Items)
{
var element = column.GetCellContent(item);
if (element != null)
{
CheckBox cb = column.CellTemplate.FindName("PART_XhCheckBox", element) as CheckBox;
cb.IsChecked = !cb.IsChecked;
}
}
} private void Window_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
// 操纵数据,直接进行反选
foreach (My my in list)
{
my.Valid = !my.Valid;
}
}
} class My : INotifyPropertyChanged
{
string name;
public string Name { get { return name; } set { name = value; FirePropertyChanged("Name"); } } bool valid;
public bool Valid
{
get { return valid; }
set
{
valid = value;
FirePropertyChanged("Valid");
}
} public event PropertyChangedEventHandler PropertyChanged;
void FirePropertyChanged(string propertyName)
{
var propertyChanged = this.PropertyChanged;
if (propertyChanged != null) propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
<CheckBox Name="PART_XhCheckBox" Grid.Column="1" Margin="5 1.5 0 0" IsChecked="{Binding Valid, UpdateSourceTrigger=PropertyChanged}" />