【发布时间】:2017-10-19 07:24:21
【问题描述】:
说,我有一个TextBox'TextBoxStyleBase' 的默认样式。
然后我定义一个DataGrid 样式,它有一个自己的TextBox 样式BasedOn 基础样式,定义另一个边框颜色。
在DataGrid 内的某个地方,我想定义另一个TextBox 样式,但继承自DataGrid 样式中定义的样式。
有没有办法让样式继承自当前为当前“上下文”中的特定控件定义的样式?
编辑:
为了更清楚,这就是我所拥有的:
<!-- explicit style for all TextBoxes -->
<Style TargetType="{x:Type TextBox}" x:Key="TextStyle">
<Setter Property="FontSize" Value="16"/>
</Style>
<!-- implicit style for all TextBoxes -->
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource TextStyle}"/>
<!-- DataGrid style changing inner TextBox style -->
<Style TargetType="{x:Type DataGrid}">
<Style.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource TextStyle}">
<Setter Property="FontSize" Value="20"/>
</Style>
<!-- since TextBox has defined implicit style this would be equivalent to -->
<!--<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="FontSize" Value="20"/>
</Style>-->
</Style.Resources>
</Style>
<Control>
<DataGrid>
<Row>
<TextBox/> <!-- should show as defined in DataGrid style -->
</Row>
<Row>
<Row.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn=" ??? ">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</Row.Resources>
<TextBox/> <!-- should show with additional trigger -->
</Row>
</DataGrid>
</Control>
在 BasedOn = '???' 中添加什么以便文本以 FontSize 20 显示,但如果悬停,则显示为粗体。
【问题讨论】: