【问题标题】:Configuring Visual State Setters for a Style Universal Windows App为样式通用 Windows 应用程序配置视觉状态设置器
【发布时间】:2016-04-29 17:06:36
【问题描述】:

我有一个 UWP 应用程序,我在其中为不同页面中使用的按钮和文本块创建了各种样式。我曾假设我将能够在样式本身上应用 Visual State 设置器。但是,Visual State 中的设置器似乎只能直接应用于特定控件。有没有办法将视觉状态应用于样式元素。我的页面中有 60 个文本块,它们都具有特定的字体大小。我是否必须为这些控件中的每个控件指定不同的字体大小才能使用 Visual State,或者是否有更简单的方法来做到这一点。

提前致谢。

【问题讨论】:

  • 您的 60 个文本块都有特定的字体大小?每个人的字体大小不一样?或者可以将它们分成几个不同字体大小的组?
  • 这 60 个文本块都有特定的字体大小以适应屏幕大小。例如移动端 15 个,桌面端 24 个。我以文本块为例。我将不得不为按钮文本框等做同样的事情。
  • 好的,那么您可以为此使用数据绑定,如下面的答案。

标签: win-universal-app uwp-xaml


【解决方案1】:

我认为你应该采取不同的方法:将60 TextBlock的字体大小绑定到一个属性,并在你的条件在后面的代码中触发时更新+通知它。

在 XAML 中:

<TextBlock FontSize={"Binding MyFontSize"}/>
<!-- 60 of your textblock here ...... -->

在您的 ViewModel 中,我使用 MVVM Light 来通知属性更改事件:

private double _MyFontSize = null;

    public double MyFontSize
    {
        get
        {
            return _MyFontSize;
        }
        set
        {
            Set(ref _MyFontSize, value);
        }
    }

在您后面的代码中: 在构造函数中:

this.SizeChanged += LoginPanel_SizeChanged;

private void LoginPanel_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if(e.NewSize.Width >= 600)
        {
            (this.DataContext as MyViewModel).MyFontSize = 20;
        }
        else
        {
            (this.DataContext as MyViewModel).MyFontSize = 16;
        }
    }

【讨论】:

  • 你能提供更多细节吗?如何根据属性触发视觉状态。只是为了澄清我正在使用视觉状态来支持不同的屏幕尺寸
  • 你不会触发视觉状态触发器。您通知属性已更改(来自您的 DataContext)。在您的情况下,订阅 Page 的 SizeChanged 事件并做出相应的反应。
  • 对不起,我是整个 UWP 模型的新手。你能分享一些代码示例如何做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多