2012-09-04 38 views
0

我有一个按钮样式,我在Content属性中有一些Path Seth。这是工作正常,直到我显示此按钮的第二个实例。我收到一个异常将内容转换为内容模板

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

这样其他职位:

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> 

回答

0

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

因此,我认为你所有的图形代码应该放在ContentTemplate属性中。如果你有麻烦,请分享你的整个样本,我尽可能地帮助你。

+0

我放置代码ib ContentPresenter,现在它工作正常。我将接受你的答案作为“理论支持”。 :) – Goran