Datatrigger 绑定到 ControlTemplate 和 ContentPresenter 中样式的 TargetType 的 属性
Datatrigger Binding to a property of the style's TargetType within a ControlTemplate and ContentPresenter
我正在为 WPF 工具提示创建样式。工具提示是一个文本框,带有指向拥有工具提示的控件的箭头。箭头需要位于文本框的左侧或右侧,具体取决于 ToolTip.Placement 是右还是左。
为此,我创建了右箭头和左箭头,并尝试使用数据触发器绑定到展示位置 属性 以便我可以设置箭头的可见性。
现在,两个箭头始终显示。我在想我的数据触发器未设置为绑定到工具提示的位置 属性,但我不知道出了什么问题。
<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>
模板被覆盖,因此您需要使用 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>
我正在为 WPF 工具提示创建样式。工具提示是一个文本框,带有指向拥有工具提示的控件的箭头。箭头需要位于文本框的左侧或右侧,具体取决于 ToolTip.Placement 是右还是左。
为此,我创建了右箭头和左箭头,并尝试使用数据触发器绑定到展示位置 属性 以便我可以设置箭头的可见性。
现在,两个箭头始终显示。我在想我的数据触发器未设置为绑定到工具提示的位置 属性,但我不知道出了什么问题。
<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>
模板被覆盖,因此您需要使用 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>