【问题标题】:WPF Data trigger to apply style on parent elementWPF数据触发器在父元素上应用样式
【发布时间】:2014-11-13 15:27:29
【问题描述】:

我有一个包含 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 上绑定数据触发器并更改父网格的样式?

谢谢

【问题讨论】:

  • 那么这个DataTrigger现在在哪里?
  • 无处可去。我只是指出条件和样式应该是什么。但默认情况下,这个以 ScrollViewer 为目标的数据触发器无法将 Style 设置为父 Grid。

标签: wpf datatrigger


【解决方案1】:

如果您想根据某些条件更改Grid.Margin,您可以使用您发布的TriggerGrid 创建Style,但您需要将默认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>

【讨论】:

  • 谢谢!根据您的解决方案,有没有办法将此条件应用于所有 Scrollviewer 而不仅仅是名称为“sv”的 Scrollviewer?
  • 我不知道怎么做。在当前解决方案中,它触发特定元素。您可以使用MultiBinding(带转换器)或MultiDataTrigger,但您需要指定要检查的ScrollViewer。否则,您最终会遇到许多 ScrollViewer 争吵设置父 Margin
  • 是的,你是对的。但是我可以看到,如果 Scrollviewer 和 Textblock 放置在单独的 UserControl 中,并且 Grid 将包含此 UserControl,则触发器不起作用。 “ElementName”仅适用于当前控件中的元素?
  • UserControl 是完全不同的名称范围。 UserControl 中的名称在外部不可见。您需要在 UserControl 中创建一些代理 DependencyProperty 以使 ScrollViewer.ComputedVerticalScrollBarVisibility 可以从外部访问
  • 我明白了。谢谢,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多