【问题标题】:Scaling with WPF使用 WPF 进行缩放
【发布时间】:2021-01-24 13:16:48
【问题描述】:

我已经在我们的窗口中实现了缩放,我们正在修改缩放变换,如下所示:

<Window.Resources>
    <ResourceDictionary>
        <ScaleTransform x:Key="windowScaleTransform" 
                        ScaleX="{Binding ScaleX, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                        ScaleY="{Binding ScaleY, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
    </ResourceDictionary>
</Window.Resources>

我们正在使用 Caliburn Micro,这在我们的主窗口中运行良好。

当我复制了相同的代码并确保实际的 ScaleX/Y 属性在其他窗口中得到更新时,这些窗口似乎并没有在监听比例变换。同样,这仅适用于新初始化的窗口,例如设置窗口。

在我们的 MainWindowViewModel 中,我们像这样初始化一个 AboutBox:

windowManager.ShowDialog(new AboutBoxViewModel(aboutBoxService), null, null);

但是关于框,即使它有那个 window.resource 代码,似乎并不关心它。我不确定我在这一点上做错了什么......

【问题讨论】:

  • 您可以在使用资源windowScaleTransform的地方添加代码。
  • 嘿,Orace,我没有在 XAML 文件中的其他任何地方使用windowScaleTransform,因此键名是多余的,因此您可以忽略它有一个。我在其他窗口 XAML 中使用相同的代码,但它不起作用

标签: c# wpf caliburn.micro


【解决方案1】:

可能会有所帮助,但由于某种原因,当我在 Window.Resources 部分中有上述代码时,其他窗口上没有发生缩放。

有效的是找到 Window/UserControl 的第一个元素,然后像这样添加缩放。就我而言,其中一个窗口的第一个元素是边框:

<Border BorderThickness="2" BorderBrush="{StaticResource ResourceKey=SeeColour}">
    <Border.LayoutTransform>
        <ScaleTransform ScaleX="{Binding Source={x:Static mediators:ScalingMediator.Instance}, Path = ScaleX}" 
                        ScaleY="{Binding Source={x:Static mediators:ScalingMediator.Instance}, Path = ScaleY}" />
    </Border.LayoutTransform>
... etc

希望这对其他人有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多