Доступ к внутреннему элементу в ControlTemplate
Вот мой код:
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="Chrome">
<Grid x:Name="Arrow">
<Grid.Background>
<DrawingBrush Viewport="0,0,4,4" Viewbox="0,-0.4,16,16" ViewboxUnits="Absolute">
<DrawingBrush.Drawing>
<GeometryDrawing x:Name="ArrowDrawing">
<GeometryDrawing.Geometry>
<PathGeometry>
<PathFigure StartPoint="1,1" IsClosed="True">
<LineSegment Point="2,2.45"/>
<LineSegment Point="3,1"/>
<LineSegment Point="2,1.75"/>
</PathFigure>
</PathGeometry>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Grid.Background>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Brush" TargetName="ArrowDrawing" Value="{StaticResource DisabledForecolor}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Поэтому, когда триггер срабатывает (во время компиляции), я получил ошибку:
Cannot find the Trigger target 'ArrowDrawing'. (The target must appear before any Setters, Triggers, or Conditions that use it.)
Как я могу получить доступ к этому GeometryDrawing
названный ArrowDrawing
из спускового крючка?
2 ответа
Решение
Этот пост может помочь
Есть способ решить эту проблему, используя привязку данных. С помощью привязки вы можете найти выход из кисти на элемент, а затем установщик может нацелить этот элемент.
На самом деле есть два способа добиться этого, один из них использует привязку:
Storyboard.Target="{Binding ElementName=ContentPopup}"
а другой - использовать внутреннюю ссылку XAML:
Storyboard.Target="{x:Reference Name=ContentPopup}"
тот же ответ здесь!