0

ContentプロパティにPathsethがあるボタンスタイルがあります。このボタンの2番目のインスタンスを表示するまで、これは正常に機能しています。例外が発生します

指定された要素は、すでに別の要素の論理的な子です。最初に切断します。

このような他の投稿:

エラー「指定された要素はすでに別の要素の論理的な子です」?

コンテンツを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 に答える