2016-06-23 3 views
0

Я использую LayoutTransform в элементе управления «Grid» верхнего уровня в Windows, чтобы выполнить ScaleTransform и реализовать коэффициент масштабирования в пользовательском интерфейсе (подобно тому, как это делают браузеры).WPF LayoutTransform: размер всплывающей подсказки не изменен

Вещи хорошо работают, но как-то всплывают подсказки с нескорректированным размером.

Если есть способ, например, перечислить все подсказки в окне и отрегулировать их размер из файла .cs? ... или любым другим способом справиться с этим?

+0

Являются ли ваши масштабные факторы динамическими? Если да, откуда они взялись? – Rowbear

+0

Они есть, но я упростил код, чтобы их больше не было. Я использую это в своем XAML: <Центр ScaleTransform CenterX = "0" CenterY = "0" ScaleX = "0.7" ScaleY = "0.7" /> Warpin

ответ

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 в моей модели просмотра окна. Вы можете сохранить динамику таким образом, я верю.

0

Как упоминалось Rowbear, всплывающие подсказки (которые являются окнами), поэтому они имеют собственное визуальное дерево. Но, насколько я знаю, большая проблема заключается в том, что эти всплывающие окна не наследуют DataContext и от нерестинга.

<Window.Resources> 
    <Style TargetType="ToolTip"> 
     <Setter Property="LayoutTransform" Value="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.LayoutTransform}" /> 
    </Style> 
</Window.Resources> 
+0

Спасибо! Мне нужно было установить привязку, как описано в вашем ответе. Я мог бы как-то принять комбинированный ответ! – Warpin

+0

странно! Я изначально думал, что это тоже будет проблемой, но я тестировал свой xaml, и это сработало. Просто окно с подключенным ресурсом. Интересно. – Rowbear

Смежные вопросы