Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGrid ScrollContentPresenter不';t捕获请求BringInToView气泡事件_C#_.net_Wpf_Events_Xaml - Fatal编程技术网

C# DataGrid ScrollContentPresenter不';t捕获请求BringInToView气泡事件

C# DataGrid ScrollContentPresenter不';t捕获请求BringInToView气泡事件,c#,.net,wpf,events,xaml,C#,.net,Wpf,Events,Xaml,我有一个带有一个数据网格的窗口。 此DataGrid的DataGridColumnHeader已模板化: <Style x:Key="headerTxtBox" TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate Target

我有一个带有一个数据网格的窗口。 此DataGrid的DataGridColumnHeader已模板化:

<Style x:Key="headerTxtBox"  TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <Border>
                               <ScrollViewer/>
                        </Border>
                        <Thumb Name="PART_LeftHeaderGripper">
                        ...
                        </Thumb>

                        <Thumb Name="PART_RightHeaderGripper">
                        ...
                        </Thumb>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

...
...
主要观点:

<Window>
    <Window.Resources>
    ...
    </Window.Resources>
    <DataGrid Loaded="GridOnLoaded"
              ColumnHeaderStyle="{StaticResource headerTxtBox}"/>
</Window>

...
在DataGrid.Loaded事件的后端,我将处理程序添加到ScrollContentPresenter.RequestBringIntoView

private void GridOnLoaded(object sender, RoutedEventArgs routedEventArgs)
    {
        ScrollContentPresenter scp = Utils.FindDescendant<ScrollContentPresenter>(_grid);
        if (scp != null)
        {
            scp.RequestBringIntoView += ScpOnRequestBringIntoView;
        }
    }
private void-gridonload(对象发送方,RoutedEventArgs RoutedEventArgs)
{
ScrollContentPresenter scp=Utils.FindDescentant(_网格);
如果(scp!=null)
{
scp.RequestBringIntoView+=ScpOnRequestBringIntoView;
}
}
问题:

如果我的模板包含ScrollViewer控件(例如TextBox),ScrollContentPresenter将永远不会捕获RequestBrintIntoView事件

如果我改变我的模板,去掉ScrollViewer,一切正常。ScrollContentPresenter将捕获每个请求BringInToView

private void GridOnLoaded(object sender, RoutedEventArgs routedEventArgs)
    {
        ScrollContentPresenter scp = Utils.FindDescendant<ScrollContentPresenter>(_grid);
        if (scp != null)
        {
            scp.RequestBringIntoView += ScpOnRequestBringIntoView;
        }
    }

当RequestBringIntoView提出时,我已经查看了路线。在这两种情况下,路线都相同。它通过ScrollContentPresenter。但在第一种情况下,RequestBringIntoView由ScrollContentPresenter的父ScrollViewer处理,而不是由ScrollContentPresenter处理。

问题得到解决。谢谢,问题是我注意力不集中。任何带有ScrollViewer的控件都将包含ScrollContentPresenter。在我的例子中,模板控件也与ScrollContentPresenter一起使用。当我使用FindDescentant方法时,我从WpfTree的顶部到底部。当然,第一个ScrollContentPresenter来自TemplatedControl,而不是DataGridColumnHeader。在我的解决方案中,我寻找DataGridRowsPresenter而不是ScrollContentPresenter,并订阅他的RequestBringIntoView事件。这足够满足我的需要了。