【问题标题】:Convert Content to ContentTemplate将内容转换为内容模板
【发布时间】:2012-09-04 19:25:47
【问题描述】:

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

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

其他类似的帖子:

Error "Specified element is already the logical child of another element"?

引导我找到需要将内容传输到 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>

【问题讨论】:

    标签: wpf wpf-controls


    【解决方案1】:

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

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

    【讨论】:

    • 我将代码放在 ContentPresenter 中,现在它工作正常。我将接受您的回答作为“理论支持”。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2011-06-20
    相关资源
    最近更新 更多