WPF VisualStateManager更改子属性

时间:2015-07-16 15:19:57

标签: wpf xaml win-universal-app

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

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

大多数 TextBlock 在控件中显式设置了 FontSize

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

我尝试使用其中一个设置器为特定的视觉状态设置 FontSize

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

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

3 个答案:

答案 0 :(得分:1)

如果没有更好的解决方案出现,您可以将一个TextBlock作为字体大小主文件,并将所有其他TextBlock绑定到该主文件。这样做只需要在VSM中设置主服务器的字体大小。

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

答案 1 :(得分:0)

MSDN有一个很好的VSM示例

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

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

答案 2 :(得分:0)

由于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">