2010-04-25 80 views
0

我有我写这个控件模板:为什么我不能在控件模板中使用模板绑定?

<Style TargetType="{x:Type controls:InfoBar}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type controls:InfoBar}"> 
       <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}"> 
        <StackPanel> 
         <Grid> 
          <Grid.Resources> 
           <Style TargetType="{x:Type TextBlock}"> 
            <Setter Property="FontFamily" Value="{TemplateBinding FontFamily}" /> 
            <Setter Property="FontSize" Value="{TemplateBinding FontSize}" /> 
            <Setter Property="Foreground" Value="{TemplateBinding Foreground}" /> 
           </Style> 
          </Grid.Resources> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition /> 
           <ColumnDefinition /> 
           <ColumnDefinition /> 
          </Grid.ColumnDefinitions> 
          <ItemsControl Grid.Column="0" ItemsSource="{TemplateBinding LeftInfoBarTextBlockCollection}"> 
           <ItemsControl.ItemsPanel> 
            <ItemsPanelTemplate> 
             <WrapPanel /> 
            </ItemsPanelTemplate> 
           </ItemsControl.ItemsPanel> 
          </ItemsControl> 
          <ItemsControl Grid.Column="1" ItemsSource="{TemplateBinding MiddleInfoBarTextBlockCollection}"> 
           <ItemsControl.ItemsPanel> 
            <ItemsPanelTemplate> 
             <WrapPanel /> 
            </ItemsPanelTemplate> 
           </ItemsControl.ItemsPanel> 
          </ItemsControl> 
          <ItemsControl Grid.Column="2" ItemsSource="{TemplateBinding RightInfoBarTextBlockCollection}"> 
           <ItemsControl.ItemsPanel> 
            <ItemsPanelTemplate> 
             <WrapPanel /> 
            </ItemsPanelTemplate> 
           </ItemsControl.ItemsPanel> 
          </ItemsControl> 
         </Grid> 
        </StackPanel> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

XAML的这部分抛出member is not valid because it does not contain a valid type name.例外上的FontFamily,字号和前景模板绑定。

<Grid.Resources> 

如果我把它改成这样:

<Grid.Resources> 

将建成,但是当我调试它,我得到这个XmlParseExeption

Set property 'System.Windows.Setter.Value' threw an exception.

如果我改变controls:InfoBarControl,其信息栏从继承,我得到相同的异常。

我在做什么错?

回答

1

的问题是在这样的:

<Style TargetType="{x:Type TextBlock}">   
    <Setter Property="FontFamily" Value="{TemplateBinding FontFamily}" />   
    <Setter Property="FontSize" Value="{TemplateBinding FontSize}" />   
    <Setter Property="Foreground" Value="{TemplateBinding Foreground}" />   
</Style> 

您可以使用TemplateBinding里面只有一个控件模板。 在这里你使用它的风格。

+0

有没有什么办法可以完成我正在尝试的那种风格,没有TemplateBinding? – Justin 2010-04-26 19:56:43

1

要回答第二个问题,Justin,您可以创建一个应用控件模板的样式。

请注意,当图钉样式设置为NumberPushpinStyle时,此样式将控件模板分配给图钉的Template属性。

<Style x:Key="NumberPushpinStyle" TargetType="m:Pushpin"> 
    <Setter Property="BorderBrush" Value="#FFF4F4F5" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate> 
     <Grid> 
      <Ellipse Fill="Black" Height="33" Stroke="White" StrokeThickness="2" Width="33" RenderTransformOrigin="0.5,0.5"> 
      <Ellipse.RenderTransform> 
       <CompositeTransform TranslateX="-16" TranslateY="16" /> 
      </Ellipse.RenderTransform> 
      </Ellipse> 
      <TextBlock Foreground="White" Text="{TemplateBinding Content}" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"> 
      <TextBlock.RenderTransform> 
       <CompositeTransform TranslateX="-16" TranslateY="15" /> 
      </TextBlock.RenderTransform> 
      </TextBlock> 
     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style>