我有一个窗口,有一些控件。在这些控件中,我有一个内容控件,用于打开多个视图。此内容控件位于ScrollViewer下。如下面的代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow"
Height="350"
Width="525">
<Grid>
<ScrollViewer Grid.Row="2"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Auto">
<ContentControl x:Name="ActiveItem"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"/>
</ScrollViewer>
</Grid>
</Window>
我们有不同的观点,我们过去通过将它们设置为ActiveItem来打开。在一个视图中,我想禁用父级的ScrollViewer。有什么办法吗? (更改只能在View的XAML中完成)。感谢
答案 0 :(得分:0)
在XAML中?不.XAML是一种标记语言而已。
但您可以使用以下方法在可视化树中查找父ScrollViewer
元素:
public static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
var parent = VisualTreeHelper.GetParent(dependencyObject);
if (parent == null) return null;
var parentT = parent as T;
return parentT ?? FindParent<T>(parent);
}
用法:
ActiveItem.Loaded += (s, e) =>
{
ScrollViewer sv = FindParent<ScrollViewer>(ActiveItem);
if (sv != null)
{
...
}
};
答案 1 :(得分:0)
您可以在视图模型中添加bool属性,以指示哪个视图需要滚动查看器并将其绑定到&#39; VerticalScrollBarVisibility&#39;使用某些转换器将bool转换为Disabled / Auto。
有点像:<ScrollViewer Grid.Row="2"
VerticalScrollBarVisibility="{Binding IsScrollNeeded, Converter={StaticResource someConverter}}"
HorizontalScrollBarVisibility="Auto">
<ContentControl x:Name="ActiveItem"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"/>
</ScrollViewer>