【问题标题】:Touch mode in WPF ApplicationsWPF 应用程序中的触摸模式
【发布时间】:2013-03-07 14:56:32
【问题描述】:

有些人可能已经注意到 Office 2013 包含一项称为触控模式的新功能。

这就是它的外观

我想知道我是否可以在 WPF 中实现相同的目标。有什么想法吗?

【问题讨论】:

  • 啊..现在我明白了...这只是 ScaleTransform 到 1.2 之类的东西。
  • 命令之间的空间和命令的大小增加了一点。
  • 查看我编辑的评论。你需要申请一个布局ScaleTransform

标签: c# .net wpf user-interface touch


【解决方案1】:

我只需要在我的主网格中添加类似这样的内容(下面的代码)。感谢 HighCore 为我指明了正确的方向。

<Grid.LayoutTransform>
    <ScaleTransform x:Name="ApplicationScaleTransform"
                CenterX="0"
                CenterY="0"
                ScaleX="1.2"
                ScaleY="1.2" />
</Grid.LayoutTransform>

但是如何使用 MVVM 模式实现这一点?

当然,我可以简单地创建一个绑定,将 ScaleX 和 ScaleY 绑定到我的 ViewModel 中的一个属性。

但它真的属于 ViewModel 吗?我的意思是这显然是 GUI 的一部分,应该只在视图中。

编辑: 也许我应该将 ScaleX 和 ScaleY 绑定到 XAML 代码隐藏中的一个属性(例如 MainWindow.xaml.cs)问题是 DataContext 已经设置为 ViewModel。

EDIT2 我的解决方案

上面的代码 sn-p 使所有元素“增长”。我对这段代码的问题是我的文本框的字体大小也受到了影响。我设法通过为每个应该缩放的元素定义样式来处理这种不需要的行为。

<ResourceDictionary>
            <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
            <Style TargetType="ScrollBar">
                <Setter Property="LayoutTransform" >
                    <Setter.Value>
                        <ScaleTransform x:Name="ApplicationScaleTransform"
                        CenterX="0"
                        CenterY="0"
                            ScaleX="{Binding ScaleFactor, UpdateSourceTrigger=PropertyChanged}"
                            ScaleY="{Binding ScaleFactor, UpdateSourceTrigger=PropertyChanged}"
                         />
                    </Setter.Value>
                </Setter>
            </Style>
            <Style TargetType="TabItem">
                <Setter Property="LayoutTransform" >
                    <Setter.Value>
                        <ScaleTransform x:Name="ApplicationScaleTransform"
                        CenterX="0"
                        CenterY="0"
                            ScaleX="{Binding ScaleFactor, UpdateSourceTrigger=PropertyChanged}"
                            ScaleY="{Binding ScaleFactor, UpdateSourceTrigger=PropertyChanged}"
                         />
                    </Setter.Value>
                </Setter>
            </Style>
            <Style TargetType="Button">
                <Setter Property="LayoutTransform" >
                    <Setter.Value>
                        <ScaleTransform x:Name="ApplicationScaleTransform"
                        CenterX="0"
                        CenterY="0"
                            ScaleX="{Binding ScaleFactor, UpdateSourceTrigger=PropertyChanged}"
                            ScaleY="{Binding ScaleFactor, UpdateSourceTrigger=PropertyChanged}"
                         />
                    </Setter.Value>
                </Setter>
            </Style>
            <ResourceDictionary.MergedDictionaries></ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

问题:这段代码看起来有点难看有没有办法为多个目标类型定义相同的sn-p?例如

【讨论】:

  • 您也可以在 ViewModel 中创建一个public bool IsTouchMode,或者在 View 中创建一个 DP(根据您的喜好),然后创建一个对此作出反应并修改 ScaleXDataTriggerScaleY 属性。
  • 对我不起作用。我想我不能用 Setter 修改 ScaleX/Y 属性。因为 Setter 在元素(UIElement)上工作,但 ScaleTransform 派生自 Transform 而不是从 UIElement 派生。
  • 或者您可以尝试使用 valueconverter 绑定到此布尔属性?
  • 我将 ScaleProperties 绑定到我的 ViewModel 中的双精度值,它运行良好。比例变换适用于我的主网格的所有子节点。但是如何防止字体大小缩放?在移动设备上使用应用程序时,无需更大的字体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 2019-07-14
  • 2023-03-08
相关资源
最近更新 更多