我在我的窗户中使用LayoutTransform'顶级'网格'控制,执行ScaleTransform并在UI上实现缩放因子(类似于浏览器的操作方式)。
事情运作良好,但不知何故,工具提示显示未调整的大小。
如果有办法例如枚举窗口中的所有工具提示并从.cs文件调整它们的大小? ......或者其他任何处理方法?
答案 0 :(得分:0)
工具提示不受影响的原因是因为工具提示是不属于窗口可视树的弹出窗口。因此,在窗口的组件上执行的任何布局转换都不会转移到工具提示。如果您主要使用通用工具提示(基本上是文本),则可以在窗口资源中创建非键控样式,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用于工具提示,该工具提示绑定到窗口视图模型上的ScaleFactor属性。你可以这样保持它的动态。我相信。
答案 1 :(得分:0)
就像Rowbear提到的那样,工具提示是弹出窗口(它们是窗口),因此它们有自己的可视树。但是,据我所知,最大的问题是,这些弹出窗口也没有从产生控件继承DataContext。
<Window.Resources>
<Style TargetType="ToolTip">
<Setter Property="LayoutTransform" Value="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.LayoutTransform}" />
</Style>
</Window.Resources>