如何在 WPF ContentControl 中找到 ScrollViewer?
How To Find ScrollViewer Inside of WPF ContentControl?
WPF 4.5/C#
我有一个应用程序,其中有多个 WPF Windows,每个都使用此自定义内容控件。我在 XAML 中这样使用它:
<ContentControl Name="myControl" Style="{StaticResource ReservedSpaceScrollBar}"
在后面的代码中,我需要能够访问里面的ScrollViewer,所以我可以调用.ScrollToTop()
我已经试过了,但没用:
((ScrollViewer)this.myControl.FindName("Scroll")).ScrollToTop();
...但是 .FindName 找不到 ScrollViewer。我究竟做错了什么?这是如何工作的?
样式的XAML如下...
<Style TargetType="{x:Type ContentControl}" x:Key="ReservedSpaceScrollBar">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" x:Name="Scroll" FocusVisualStyle="{x:Null}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ContentPresenter />
<Border Width="{x:Static SystemParameters.VerticalScrollBarWidth}" x:Name="Placeholder" Grid.Column="1" />
</Grid>
</ScrollViewer>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ComputedVerticalScrollBarVisibility, ElementName=Scroll}" Value="Visible">
<Setter TargetName="Placeholder" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
使用 class 你可以查看元素的子元素;例如:
var childCount = VisualTreeHelper.GetChildrenCount(this.myControl);
for (int i = 0; i < childCount; i++)
{
var child = VisualTreeHelper.GetChild(this.myControl, i);
if (child.GetValue(NameProperty).ToString() == "Scroll")
{
((ScrollViewer)child).ScrollToTop();
}
}
WPF 4.5/C#
我有一个应用程序,其中有多个 WPF Windows,每个都使用此自定义内容控件。我在 XAML 中这样使用它:
<ContentControl Name="myControl" Style="{StaticResource ReservedSpaceScrollBar}"
在后面的代码中,我需要能够访问里面的ScrollViewer,所以我可以调用.ScrollToTop()
我已经试过了,但没用:
((ScrollViewer)this.myControl.FindName("Scroll")).ScrollToTop();
...但是 .FindName 找不到 ScrollViewer。我究竟做错了什么?这是如何工作的?
样式的XAML如下...
<Style TargetType="{x:Type ContentControl}" x:Key="ReservedSpaceScrollBar">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" x:Name="Scroll" FocusVisualStyle="{x:Null}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ContentPresenter />
<Border Width="{x:Static SystemParameters.VerticalScrollBarWidth}" x:Name="Placeholder" Grid.Column="1" />
</Grid>
</ScrollViewer>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ComputedVerticalScrollBarVisibility, ElementName=Scroll}" Value="Visible">
<Setter TargetName="Placeholder" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
使用 class 你可以查看元素的子元素;例如:
var childCount = VisualTreeHelper.GetChildrenCount(this.myControl);
for (int i = 0; i < childCount; i++)
{
var child = VisualTreeHelper.GetChild(this.myControl, i);
if (child.GetValue(NameProperty).ToString() == "Scroll")
{
((ScrollViewer)child).ScrollToTop();
}
}