2015-07-17 2 views
2

Я создаю стиль для подсказок WPF. Всплывающие подсказки представляют собой текстовое поле со стрелкой, указывающей на элемент управления, владеющий всплывающей подсказкой. Стрелка должна быть либо слева, либо справа от текстового поля, в зависимости от того, является ли ToolTip.Placement правильным или левым.Datatrigger Связывание с объектом TargetType стиля в ControlTemplate и ContentPresenter

Для этого я создаю стрелку «Вправо» и «Влево» и пытаюсь использовать datatrigger для привязки к свойству Placement, чтобы я мог установить видимость стрелки.

Прямо сейчас, обе стрелки всегда отображаются. Я думаю, что мои datatriggers не настроены для привязки к свойству Placement ToolTip, но я не знаю, что случилось.

 <Style TargetType="ToolTip"> 
     <Setter Property="Placement" Value="Right" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ToolTip"> 
        <ContentPresenter> 
         <ContentPresenter.Content> 
          <StackPanel Orientation="Horizontal" > 

           <Path x:Name="LeftArrow" Fill="DarkOrange" Data="M 0 0 L 12 9 L 12 -9 Z" VerticalAlignment="Center" Stretch="Uniform"> 
            <Path.Style> 
             <Style TargetType="Path"> 
              <Style.Triggers> 
               <DataTrigger Binding="{Binding Placement}" Value="Right"> 
                <Setter Property="Visibility" Value="Collapsed" /> 
               </DataTrigger> 
              </Style.Triggers> 
             </Style> 
            </Path.Style> 
           </Path> 

           <TextBox Background="DarkOrange" Height="50" Width="50" /> 

           <Path x:Name="RightArrow" Fill="DarkOrange" Data="M 0 0 L -12 -9 L -12 9 Z" VerticalAlignment="Center" Stretch="Uniform"> 
            <Path.Style> 
             <Style TargetType="Path"> 
              <Style.Triggers> 
               <DataTrigger Binding="{Binding Placement}" Value="Right"> 
                <Setter Property="Visibility" Value="Collapsed" /> 
               </DataTrigger> 
              </Style.Triggers> 
             </Style> 
            </Path.Style> 
           </Path> 

          </StackPanel> 
         </ContentPresenter.Content> 
        </ContentPresenter> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

ответ

3

Шаблон перекрываться поэтому вам нужно использовать TemplatedParent. Проверьте значение либо влево, либо вправо, так как в обоих случаях DataTrigger проверяет право.

<Path x:Name="RightArrow" Fill="DarkOrange" Data="M 0 0 L -12 -9 L -12 9 Z" VerticalAlignment="Center" Stretch="Uniform"> 
    <Path.Style> 
      <Style TargetType="Path"> 
       <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Placement}" Value="Right"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Path.Style> 
</Path> 
+0

Отлично, спасибо. – GreenRibbon