WPF VisualStateManager 更改子属性

WPF VisualStateManager Changing Child Properties

我有一个 ScrollViewer,其中包含一些嵌套的子元素,如下所示:

<ScrollViewer x:Name="MainScrollViewer"...>
    <Grid ...>
        <TextBlock ... FontSize="20" ...>
        <StackPanel ...>
            <TextBlock ... FontSize="15" ...>
            ...
            <TextBlock ... FontSize="15" ...>
        </StackPanel ...>
    </Grid>
</ScrollViewer>

大多数 TextBlock 都在控件中明确设置了 FontSize

我正在编写一个 Windows 通用应用程序,因此我使用视觉状态管理器来处理不同的 window 大小。我需要为其中一种视觉状态更改 MainScrollViewer 中所有子元素的字体大小。

我尝试使用设置器之一为特定视觉状态设置 FontSize

<Setter Target="MainScrollViewer.FontSize" Value="10">

这似乎没有效果,因为它没有覆盖值。 如何使用 VSM 覆盖子元素的所有字体大小 Setter?

如果没有更好的解决方案,您可以采用一个 TextBlock 作为字体大小母版,并将所有其他 TextBlocks 绑定到该母版。这样做你只需要在VSM中设置master的字体大小即可。

    <TextBlock x:Name="FonSizeMaster" FontSize="20" ... />
    <TextBlock FontSize="{Binding FontSize, ElementName=FonSizeMaster}" .../>

MSDN 有一个很好的 VSM 示例

管理状态和控件状态之间转换的逻辑。

https://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager(v=vs.110).aspx

由于 FontSize 是附加的 属性,因此以下内容也应该有效(未测试):

<ScrollViewer x:Name="MainScrollViewer" TextElement.FontSize="20" ...>
    <Grid ...>
    <TextBlock ... >
    <StackPanel ...>
        <TextBlock ... >
        ...
        <TextBlock ... >
    </StackPanel ...>
    </Grid>
</ScrollViewer>

VSM:

<Setter TargetName="MainScrollViewer" Property="TextElement.FontSize" Value="10">