TemplateBinding и ContentPresenter в Silverlight / WPF - PullRequest
1 голос
/ 22 ноября 2010

У меня есть список, в котором есть шаблоны, определенные для стилей ItemContainer и ItemTemplate.

Мой 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>

Который все отлично работает.

Но я хочу, чтобы при выборе элемента (т.е. выбранного визуального состояния) я хотел, чтобы TextBlock в шаблоне данных изменил свой цвет переднего плана на черный вместо белого и увеличил размер шрифта. Но я не могу найти чистый способ сделать это, поскольку TemplateBinding, по-видимому, недоступен из DataTemplate.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Если вы хотите, чтобы шаблон для ItemContainer управлял передним планом, вы можете установить его там, а не внутри ItemTemplate. TextBlock.Foreground и TextBlock.FontSize могут использоваться в качестве вложенных свойств и будут наследоваться от родительского значения:

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

Параметры этих свойств необходимо будет удалить из шаблона ItemTemplate, чтобы избежать переопределения унаследованных значений. Затем вы можете установить любые нужные вам значения из анимации VisualState.

0 голосов
/ 19 января 2012

Не думаю, что ответ больше работает в текущих версиях Silverlight, прикрепленные orpererties в ContentPresenter даже не строят больше. Кто-нибудь еще выяснит это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...