如何通过Datatemplate以控件的样式更改TextBlock的前景?

时间:2015-05-26 03:51:40

标签: wpf

我有一个控件InputField的样式,代码为xaml:

    <Style TargetType="{x:Type c:InputField}" BasedOn="{StaticResource TextBoxStyle}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type c:InputField}">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="auto"></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    <TextBlock Text="{Binding Label, RelativeSource={RelativeSource TemplatedParent}}" Grid.Row="0" 
                           Foreground="{DynamicResource InputFieldLabelForegroundBrush}" Name="Label" 
                           />
                    <Border Grid.Row="1"
                          Background="{TemplateBinding Background}"
                          BorderBrush="{TemplateBinding BorderBrush}"
                          BorderThickness="{TemplateBinding BorderThickness}" >
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Foreground="{DynamicResource InputFieldLabelForegroundBrush}" specification foreground of TextBlock.

我在DataTemplate中使用此控件InputField:

<DataTemplate DataType="{x:Type g:ItemTextBox}">        
    <c:InputField Label="{Binding Caption}" Text="{Binding Text}"/>
</DataTemplate>

它与TextBlock配合使用Foreground是InputFieldLabelForegroundBrush。我在很多地方使用ItemTextBox。其中之一是:

<DataTemplate DataType="{x:Type v:DetailSettings}">
    <Border Width="290" Background="{DynamicResource DetailSettingsBackgroundBrush}">
        <Grid>
            <ItemsControl ItemsSource="{Binding Properties}"/>
        </Grid>
    </Border>
</DataTemplate>

PropertiesItemTextBox。我现在的问题是:&#34;如何仅针对此DataTemplate更改ForegroundTextBlock的{​​{1}},这意味着我不得更改InputField Foreground的颜色1}}适用于所有窗口,但仅适用于此TextBlock?&#34; 谢谢你的帮助!!!

1 个答案:

答案 0 :(得分:1)

Style中,使用Setter元素声明默认为InputFieldLabelForegroundBrush的前景。

<Style TargetType="{x:Type c:InputField}" BasedOn="{StaticResource TextBoxStyle}">
    <Setter Property="Foreground" Value="{DynamicResource InputFieldLabelForegroundBrush}"/>
    ...
</Style>

Template的{​​{1}}中,您可以使用Style来引用此内容。

TemplateBinding

现在您需要在<TextBlock Foreground="{TemplateBinding Foreground}" ... /> 中完成所有操作,明确设置DataTemplate上的ForegroundTextBlock将完成剩下的工作。

TemplateBinding