【问题标题】:WPF VisualStateManager Changing Child PropertiesWPF VisualStateManager 更改子属性
【发布时间】:2015-07-16 15:19:56
【问题描述】:

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

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

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

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

我尝试使用其中一个设置器来设置 FontSize 以获得特定的视觉状态:

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

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

【问题讨论】:

    标签: wpf xaml win-universal-app


    【解决方案1】:

    如果没有更好的解决方案出现,您可以将一个TextBlock 作为字体大小主控,而所有其他 TextBlocks 都绑定到该主控。这样做只需要在VSM中设置master的字体大小即可。

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

    【讨论】:

      【解决方案2】:

      MSDN 有一个很好的 VSM 示例

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2014-05-15
          • 2011-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多