0

我有一个按钮样式,其中我在 Content 属性中有一些 Path 设置。在我显示此按钮的第二个实例之前,它工作正常。我遇到了一个例外

指定元素已经是另一个元素的逻辑子元素。先断开它。

其他类似这样的帖子:

错误“指定元素已经是另一个元素的逻辑子元素”?

引导我找到需要将内容传输到 ContentTemplate 的解决方案。

<Viewbox>
    <Grid Margin="0,0,30,30">
        <Path Fill="#FFFFFFFF">
            <Path.Data>
                <PathGeometry Figures="m 13.123027 65.796864 0 81.448876 133.750213 0 0 -133.778725 -67.192062 0 z" FillRule="NonZero"/>
            </Path.Data>
        </Path>
        <Path Fill="{StaticResource DataCRUDIconBrush}">
            <Path.Data>
                <PathGeometry Figures="M 79.624708 0.36218262 0 62.950511 l 0 97.411669 160 0 0 -159.99999738 -80.375292 0 z m 2.28303 16.89635038 61.172792 0 0 126.207297 -126.161061 0 0 -76.829978 0.187646 -0.156158 64.800623 0 0 -49.221161 z" FillRule="NonZero"/>
            </Path.Data>
        </Path>
        <Path Fill="#FFFFFFFF">
            <Path.Data>
                <PathGeometry Figures="m 13.123027 65.796864 0 81.448876 133.750213 0 0 -133.778725 -67.192062 0 z" FillRule="NonZero"/>
            </Path.Data>
            <Path.RenderTransform>
                <TranslateTransform X="30" Y="30"/>
            </Path.RenderTransform>
        </Path>
        <Path Fill="{StaticResource DataCRUDIconBrush}">
            <Path.Data>
                <PathGeometry Figures="M 79.624708 0.36218262 0 62.950511 l 0 97.411669 160 0 0 -159.99999738 -80.375292 0 z m 2.28303 16.89635038 61.172792 0 0 126.207297 -126.161061 0 0 -76.829978 0.187646 -0.156158 64.800623 0 0 -49.221161 z" FillRule="NonZero"/>
            </Path.Data>
            <Path.RenderTransform>
                <TranslateTransform X="30" Y="30"/>
            </Path.RenderTransform>
        </Path>
    </Grid>
</Viewbox>

如何翻译此代码以适应 ContentTemplate,而不会丢失我在那里拥有的触发器?

<Setter.Value>
    <ControlTemplate TargetType="Button">
    ....
        <ContentPresenter x:Name="Content" Opacity="0.5" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
    </ControlTemplate>
</Setter.Value>
4

1 回答 1

0

我知道你的问题。您正在为ContentPresenter.Content 属性使用数据绑定。在这种情况下,您需要确定您的绑定对象不是视觉元素。这非常重要。从逻辑树断开连接不是一个好的解决方案(只是“瓶颈”,换句话说)。内容只能包含非可视对象。控件的所有可视部分都应在其ContentPresenter.ContentTemplate属性中,而不是其他方式。

因此,我认为您所有带有图形的代码都应该放在 ContentTemplate 属性中。如果您遇到问题,请分享您的整个样品,我会尽力帮助您。

于 2012-09-04T19:55:17.313 回答