我有一个 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覆盖子元素的所有字体大小?
答案 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">