访问 ControlTemplate 中的内部元素

发布于 2024-11-09 08:07:17 字数 1733 浏览 5 评论 0原文

这是我的代码:

<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>

因此,当触发器触发时(在编译时),我收到错误:

找不到触发器目标“ArrowDrawing”。 (目标必须出现在使用它的任何 Setters、触发器或条件之前。)

我如何从触发器实际访问名为 ArrowDrawingGeometryDrawing

Here goes my code:

<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>

So when the trigger triggers (on compile time), I got the error:

Cannot find the Trigger target 'ArrowDrawing'. (The target must appear before any Setters, Triggers, or Conditions that use it.)

How do I actually access that GeometryDrawing named ArrowDrawing from the trigger?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半葬歌 2024-11-16 08:07:17

实际上有两种方法可以实现这一点,一种是使用绑定:

Storyboard.Target="{Binding ElementName=ContentPopup}"

另一种是使用 XAML 内部引用:

Storyboard.Target="{x:Reference Name=ContentPopup}"

相同的答案是 这里

Actually there is two ways to achieve this, one is using a binding:

Storyboard.Target="{Binding ElementName=ContentPopup}"

and the other one is to use a XAML internal reference:

Storyboard.Target="{x:Reference Name=ContentPopup}"

the same answer is here!

楠木可依 2024-11-16 08:07:17

这篇文章可能会有所帮助

不过,有一种方法可以解决这个问题,
通过使用数据绑定。与一个
绑定,你可以找到出路
刷到一个元素,然后
Setter 可以定位该元素。

This post might help

There is a way to solve this, though,
by using data binding. With a
Binding, you can find your way out of
the brush to an element, and then the
Setter can target that element.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文