WPF数据触发器在父元素上应用样式

时间:2014-11-13 15:27:30

标签: wpf datatrigger

我有一个包含Scrollviewer的Grid。如果垂直滚动条可见,我想更改网格的边距。

<Grid x:Name="TopGrid" Margin="50,10,100,10" Background="Gainsboro"  >
        <ScrollViewer x:Name="sv" VerticalScrollBarVisibility="Auto">
            <TextBlock x:Name="ItemText" Text="Description" />
         </ScrollViewer>
</Grid>

Scrollviewer中的DataTrigger条件应为:

<DataTrigger Binding="{Binding ComputedVerticalScrollBarVisibility,
                                        ElementName=sv}" Value="Visible">
</DataTrigger>

并且网格的样式应更改为:

<Setter TargetName="TopGrid" Property="Margin" Value="100"/>

如何在Scrollviewer上绑定数据并更改父网格的样式?

由于

1 个答案:

答案 0 :(得分:2)

如果您想根据某些条件更改Grid.Margin,可以使用StyleGrid创建Trigger但您需要移动默认Margin值为Setter,否则DataTrigger无法更改该值

<Grid x:Name="TopGrid" Background="Gainsboro">
    <Grid.Style>
        <Style TargetType="{x:Type Grid}">
            <Setter Property="Margin" Value="50,10,100,10"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=sv, Path=ComputedVerticalScrollBarVisibility}" Value="Visible">
                    <Setter Property="Margin" Value="100"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Grid.Style>
    <ScrollViewer x:Name="sv" VerticalScrollBarVisibility="Auto">
        <TextBlock x:Name="ItemText" Text="Description" />
    </ScrollViewer>
</Grid>