我在 Windows 的顶级“网格”控件中使用 LayoutTransform,来执行 ScaleTransform 并在 UI 上实现缩放系数(类似于浏览器的操作方式)。
一切正常,但不知何故,工具提示以未调整的尺寸显示。
是否有办法枚举窗口中的所有工具提示并从 .cs 文件调整其大小? ...或者有其他方法来处理这个问题吗?
最佳答案
工具提示不受影响的原因是工具提示是弹出窗口,不属于窗口可视化树的一部分。因此,对窗口组件执行的任何布局转换都不会传递到工具提示。如果您主要有通用工具提示(基本上是文本),则可以在窗口资源中创建非键控样式,WPF 会自动将其应用到所有工具提示:
<Window.Resources>
<Style TargetType="ToolTip">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToolTip}">
<Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<Border.LayoutTransform>
<ScaleTransform ScaleX="{Binding ScaleFactor}"></ScaleTransform>
</Border.LayoutTransform>
<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel x:Name="MainPanel">
<StackPanel.LayoutTransform>
<ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}"></ScaleTransform>
</StackPanel.LayoutTransform>
<TextBlock ToolTip="blah">haha!</TextBlock>
</StackPanel>
在示例中,我将 ScaleX/Y 作为工具提示绑定(bind)到窗口 View 模型上的 ScaleFactor 属性。我相信你可以通过这种方式保持动态。
关于WPF布局变换: ToolTip size not modified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001665/