通过RelativeSource和FindAncestor扩展树以更改依赖项属性

时间:2014-07-07 20:46:14

标签: silverlight xaml relativesource

希望今天学到新东西,并希望有人能够在XAML中以优雅的方式实现这一目标。

因此,对于这个概念,请采用以下示例;

<Grid>

   <ScrollViewer VerticalScrollbarVisibility="Auto">

      <Grid>
         <Grid.Resources>
           <Style TargetType="{RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}">
              <Setter Property="VerticalScrollbarVisibility" Value="Disabled"/>
           </Style>
         </Grid.Resources>
      </Grid>

   </ScrollViewer>

</Grid>

这显然不会起作用(也不是预期的),但......它传达了我想要完成的概念。伸展树以在运行时操纵祖先依赖关系,而不能直接定位元素,即使它们可能在单独的UserControl中被放在一个视图中。

我尝试在Loaded事件中抛出一个Storyboard,用DoubleAnimation和其他一些尝试来改变属性,但到目前为止没有任何乐趣,这是可以理解的,但它只是以提高技能组的名义。我试图完全用XAML来完成它,我相信它只是其中之一,另一双眼睛可以提供不同的路径。

1 个答案:

答案 0 :(得分:3)

我不确定为什么你的故事板方法不起作用(可能是因为VerticalScroll中的拼写错误 B arVisibility?。

该方法的一个变体是在Loaded事件中使用ChangePropertyAction。我可以确认这可以禁用滚动条:

  <Grid>
     <i:Interaction.Triggers>
         <i:EventTrigger EventName="Loaded">
             <ei:ChangePropertyAction 
                 TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}}"
                 PropertyName="VerticalScrollBarVisibility"
                 Value="Disabled"
             />
         </i:EventTrigger>
     </i:Interaction.Triggers>
  </Grid>