C# 在网格视图中引用单元格中的文本框
因此,我在视图prop中使用C# 在网格视图中引用单元格中的文本框,c#,wpf,listview,data-binding,C#,Wpf,Listview,Data Binding,因此,我在视图prop中使用GridView制作了一个ListView: <ListView Grid.Row="1" Name="TicketListView" Margin="20,5,20,5"> <ListView.View> <GridView> <GridViewColumn Header="Owned" DisplayMemberBinding="{Binding Ow
GridView
制作了一个ListView
:
<ListView Grid.Row="1" Name="TicketListView" Margin="20,5,20,5">
<ListView.View>
<GridView>
<GridViewColumn Header="Owned" DisplayMemberBinding="{Binding Owned}"/>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Price" DisplayMemberBinding="{Binding Price, ConverterCulture='en-US', StringFormat={}{0:C2}}"/>
<GridViewColumn Header="Amount">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox MinWidth="20" TextAlignment="Center" Margin="5" Text="{Binding Bought, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
...
</ListView>
...
在这个列表视图中选择项目时,我想重点关注特定的文本框
,这样您就不必点击文本框
来写,而是可以点击项目(行)并开始更改其值。希望你能理解
这是可能的,还是我应该用另一种方式执行此列表?关于listitem changed事件
做
您可以处理
ListViewItem
的PreviewMouseLeftButtonDown
事件,并使用VisualTreeHelper
类获取对文本框的引用:
<ListView Grid.Row="1" Name="TicketListView">
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="TicketListView_PreviewMouseLeftButtonDown" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Owned" DisplayMemberBinding="{Binding Owned}"/>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Price" DisplayMemberBinding="{Binding Price, ConverterCulture='en-US', StringFormat={}{0:C2}}"/>
<GridViewColumn Header="Amount">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox MinWidth="20" TextAlignment="Center" Margin="5" Text="{Binding Bought, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
private void TicketListView\u PreviewMouseLeftButtonDown(对象发送器,鼠标按钮ventargs e)
{
ListViewItem lvi=作为ListViewItem的发件人;
TextBox TextBox=GetChildOfType(lvi);
如果(文本框!=null)
{
textBox.Dispatcher.BeginInvoke(新操作(()=>
{
bool b=textBox.Focus();
键盘。焦点(文本框);
}));
}
}
私有静态T GetChildOfType(DependencyObject depObj),其中T:DependencyObject
{
if(depObj==null)
返回null;
for(int i=0;i
我不知道如何感谢你……你从哪里知道这一切?不客气,但请记住投票选出有用的答案:。我从哪里知道这一切?经验为王:)
<ListView Grid.Row="1" Name="TicketListView">
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="TicketListView_PreviewMouseLeftButtonDown" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Owned" DisplayMemberBinding="{Binding Owned}"/>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Price" DisplayMemberBinding="{Binding Price, ConverterCulture='en-US', StringFormat={}{0:C2}}"/>
<GridViewColumn Header="Amount">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox MinWidth="20" TextAlignment="Center" Margin="5" Text="{Binding Bought, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
private void TicketListView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ListViewItem lvi = sender as ListViewItem;
TextBox textBox = GetChildOfType<TextBox>(lvi);
if (textBox != null)
{
textBox.Dispatcher.BeginInvoke(new Action(() =>
{
bool b = textBox.Focus();
Keyboard.Focus(textBox);
}));
}
}
private static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj == null)
return null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = (child as T) ?? GetChildOfType<T>(child);
if (result != null) return result;
}
return null;
}