将xaml样式附加到元素而不明确说明它

时间:2010-02-28 00:17:22

标签: silverlight

我在silverlight toolkit的手风琴控件中设置/模板 AccordionItem 时遇到问题。出于某种原因,子控件左对齐。我可以解决此问题的唯一方法是编辑 AccordionItem 上的 ExpandableContentControlStyle

样式位于:

<Style x:Key="ExpandableContentControlStyle1" TargetType="layoutPrimitivesToolkit:ExpandableContentControl">
  <Setter.Value>
     <ControlTemplate TargetType="layoutPrimitivesToolkit:ExpandableContentControl">
        <ContentPresenter x:Name="ContentSite" Cursor="{TemplateBinding Cursor}" Margin="0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" ContentTemplate="{TemplateBinding ContentTemplate}" HorizontalAlignment="Stretch" />
     </ControlTemplate>
  </Setter.Value>
 </Setter>
</Style>

现在我的问题是要将此样式附加到AccordionItem,我必须设置它:

<layoutToolkit:Accordion HorizontalAlignment="Stretch">
   <layoutToolkit:AccordionItem Header="Hello" BorderBrush="{x:Null}" ExpandableContentControlStyle="{StaticResource ExpandableContentControlStyle1}"/>
   <layoutToolkit:AccordionItem Header="Haha" BorderBrush="{x:Null}"/>
</layoutToolkit:Accordion>

但那些 AccordionItem 将从 ItemSource 生成。我想做的是将该样式应用于生成的 AccordionItem ,而不进行设置。

PS。如果我能找到如何从父 Accordion 编辑( ContentPresenter x:Name =“ContentSite”),上述问题就会过时。我无法从以下任何模板属性中编辑它:

  1. 的ContentTemplate
  2. ItemContainerStyle
  3. AccordionButtonStyle
  4. ItemsPanel
  5. 的ItemTemplate
  6. 如果有人知道这是怎么回事,我会很感激帮助,或者你可以帮助设计多个元素。

1 个答案:

答案 0 :(得分:0)

我自己没有使用过Accordion控件,但通常会将ItemContainerStyle设置为列表中每个项目所需的样式。例如,如果您想在ListBox上使用特定的ListBoxItem样式,请将ItemContainerStyle设置为所需的ListBoxItem样式。我瞥了一下手风琴的来源,这似乎也适用于那个控制。尝试将Accordion的ItemContainerStyle属性设置为ExpandableContentControlStyle1。

<layoutToolkit:Accordion
    HorizontalAlignment="Stretch"
    ItemContainerStyle="{StaticResource ExpandableContentControlStyle1}">
</layoutToolkit:Accordion>

要在控件本身之外设置样式,请为Accordion创建样式。如果您使用的是Silverlight 4,则可以使用隐式样式。将以下样式放在页面的<UserControl.Resources>部分。

<Style TargetType="layoutToolkit:Accordion">
  <Setter Property="ItemContainerStyle" Value="{StaticResource ExpandableContentControlStyle1}"/>
</Style>

否则,对于Silverlight 3,您必须明确地为该样式指定一个Key并在Accordion控件上显式设置样式。

<Style x:Key="Control_Accordion" TargetType="layoutToolkit:Accordion">
    <Setter Property="ItemContainerStyle" Value="{StaticResource ExpandableContentControlStyle1}"/>
</Style>

<layoutToolkit:Accordion
    Style="{StaticResource Control_Accordion}"
    HorizontalAlignment="Stretch">
</layoutToolkit:Accordion>