首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GridViewColumnHeader模板中访问文本框

如何在GridViewColumnHeader模板中访问文本框
EN

Stack Overflow用户
提问于 2016-08-17 14:48:52
回答 1查看 386关注 0票数 0

我想在每一列的标题中创建一个带有header and filter的自定义gridview。我在WPF中成功创建了一个GridViewColumnHeader模板,如下所示:

代码语言:javascript
复制
<Style TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                    <Border BorderThickness="0,0,0,1" BorderBrush="Black" Background="Transparent">
                        <StackPanel Orientation="Vertical" Margin="1">
                            <TextBlock Padding="5,5,5,0" Text="{TemplateBinding Content}" Width="{TemplateBinding Width}" TextAlignment="Center" />
                            <TextBox x:Name="HeaderSearch" Padding="5,5,5,0" Width="{TemplateBinding Width}" TextAlignment="Center" />
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="Foreground" Value="Black" />
    </Style>

<ScrollViewer Grid.Column="1">
        <ListView>
            <ListView.View>
                <GridView >
                    <GridViewColumn Header="Code" Width="100"/>
                    <GridViewColumn Header="Name" Width="100"/>
                    <GridViewColumn Header="Description" Width="100"/>
                </GridView>
            </ListView.View>
        </ListView>
    </ScrollViewer>

如何访问后台代码中的文本框?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-08-17 15:46:25

添加GotFocusLoaded事件处理程序

代码语言:javascript
复制
<TextBox x:Name="HeaderSearch" Padding="5,5,5,0"
       Width="{TemplateBinding Width}" TextAlignment="Center" 
       GotFocus="HeaderSearch_GotFocus" />

TextBox CodeHeaderSearch;
TextBox NameHeaderSearch;

 private void HeaderSearch_GotFocus(object sender, RoutedEventArgs e)
 {
     TextBox t = sender as TextBox;
     var header = GetGridViewColumnHeader(t);
     if (header == "Code")
     {
         CodeHeaderSearch = sender as TextBox;
     }
     else if (header == "Name")
     {
         NameHeaderSearch = sender as TextBox;
     }
     // ....
 }

 private string GetGridViewColumnHeader(TextBox t)
 {
     var GridViewColumn = FindParent<GridViewColumnHeader>(t);
     return GridViewColumn.Column.Header as string;
 }

 public static T FindParent<T>(DependencyObject child) where T : DependencyObject
 {
     //get parent item
     DependencyObject parentObject = VisualTreeHelper.GetParent(child);

     //we've reached the end of the tree
     if (parentObject == null) return null;

     //check if the parent matches the type we're looking for
     T parent = parentObject as T;
     if (parent != null)
         return parent;
     else
         return FindParent<T>(parentObject);
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38989879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档