我有一个控件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>
Properties
是ItemTextBox
。我现在的问题是:&#34;如何仅针对此DataTemplate更改Foreground
中TextBlock
的{{1}},这意味着我不得更改InputField
Foreground
的颜色1}}适用于所有窗口,但仅适用于此TextBlock
?&#34;
谢谢你的帮助!!!
答案 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
上的Foreground
,TextBlock
将完成剩下的工作。
TemplateBinding