Wpf 将内容转换为ContentTemplate

Wpf 将内容转换为ContentTemplate,wpf,wpf-controls,Wpf,Wpf Controls,我有一个按钮样式,在内容属性中有一些路径设置。在我显示这个按钮的第二个实例之前,它工作正常。我有个例外 指定的元素已经是另一个元素的逻辑子元素。先把它断开 其他类似的帖子: 让我找到了一个解决方案,需要将内容传输到ContentTemplate <Viewbox> <Grid Margin="0,0,30,30"> <Path Fill="#FFFFFFFF"> <Path.Data>

我有一个按钮样式,在内容属性中有一些路径设置。在我显示这个按钮的第二个实例之前,它工作正常。我有个例外

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

其他类似的帖子:

让我找到了一个解决方案,需要将内容传输到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>

....

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


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

我将代码放在ContentPresenter上,目前它工作正常。我将接受你的回答作为“理论支持”。)