2010-11-22 62 views
1

我有一個列表框,它爲ItemContainer和ItemTemplate樣式定義了模板。Silverlight中的TemplateBinding和ContentPresenter/WPF

我ItemTemplate中是一個DataTemplate,這是非常簡單的:

<DataTemplate x:Key="DataTemplate1"> 
    <Grid x:Name="grid"> 
    <TextBlock TextWrapping="Wrap" Text="{Binding}" Foreground="White" FontSize="24" />  
    </Grid> 
</DataTemplate> 

和ItemContainer也很簡單:

<Grid x:Name="Grid" HorizontalAlignment="Stretch" Height="Auto" SnapsToDevicePixels="true" Width="373" Background="{x:Null}"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="37"/> 
    </Grid.ColumnDefinitions> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="SelectionStates"> 
      <VisualState x:Name="Unselected"/> 
      <VisualState x:Name="Selected"/> 
      <VisualState x:Name="SelectedUnfocused"/> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
    <ContentPresenter x:Name="contentPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Stretch" Margin="2,0,0,0" d:LayoutOverrides="Width"> 
    </ContentPresenter> 
    <Image x:Name="image" HorizontalAlignment="Center" Margin="0,0,0,1" Source="/MyApp;component/Images/icon_arrowcircle.png" Stretch="Uniform" Width="37" Grid.Column="1" VerticalAlignment="Center" Opacity="0"/> 
</Grid> 

這一切工作正常。

但我希望能夠做到的是,當一個項目被選中(即選定的視覺狀態),我希望DataTemplate中的TextBlock將其前景顏色更改爲黑色而不是白色,並使字體尺寸更大。但我似乎無法找到一個乾淨的方式來做到這一點,因爲TemplateBinding似乎無法從DataTemplate中獲得。

任何想法?

回答

2

如果您希望ItemContainer的模板控制前景,您可以將其設置爲那裏,而不是放在ItemTemplate中。 TextBlock.Foreground和TextBlock.FontSize可以用作附加屬性和將從父值繼承:

<ContentPresenter TextBlock.Foreground="White" TextBlock.FontSize="18"/> 

這些屬性的設置將需要從ItemTemplate中除去,以避免重寫繼承的值。然後,您可以從VisualState動畫中設置所需的任何值。

+0

雖然我不認爲它適用於silverlight。 – AnthonyWJones 2010-11-22 10:13:48

+0

這是有效的!非常感謝約翰,但作爲對此的延伸,我如何才能觸發在不同視覺狀態下改變這些值? – Mark 2010-11-22 21:59:53

+0

其實你可以:)我剛剛發現這個博客查爾斯http://www.charlespetzold.com/blog/2007/09/080231.html – Mark 2010-11-22 22:08:25

0

不要以爲當前Silverlight版本中的答案已經解決了,ContentPresenter上的附加orpoerties甚至不再構建。任何人都知道這一點?

相關問題