我用弹出窗口编写了一个用户控件,其内容正在控件之外设置.该控件的ControlTemplate如下所示:
<ControlTemplate TargetType="local:InfoIcon">
<Grid>
<ToggleButton x:Name="HelpButton" Style="{StaticResource HelpButton}" />
<Popup PlacementTarget="{Binding ElementName=HelpButton}" Placement="Bottom"
IsOpen="{Binding ElementName=HelpButton, Path=IsChecked, Mode=TwoWay}" StaysOpen="False">
<Border BorderBrush="#767676" BorderThickness="1"
Background="#f1f2f7">
<Border.Resources>
<!-- Important -->
<Style TargetType="Label">
<Setter Property="Foreground" Value="#575757" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="#575757" />
</Style>
<!-- /Important -->
</Border.Resources>
<ContentPresenter Content="{TemplateBinding HelpContent}" />
</Border>
</Popup>
</Grid>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
该Important部分-我想指定自定义样式的项目,目前正在投放弹出里面(它作为一个可点击的提示)
我通过以下方式使用我的控件:
<local:MyControl>
<local:MyControl.HelpContent>
<TextBlock>Ala ma kota</TextBlock>
</local:MyControl.HelpContent>
</local:MyControl>
Run Code Online (Sandbox Code Playgroud)
但是,尽管边框中的样式,TextBlock文本的颜色总是继承其父级的值(使用Snoop检查) - 导致白色背景上的白色文本.
您可以使用小型PoC应用程序,这可以解决问题.
我的观察:
Label.它只是不起作用TextBlock.TextBlock.Foreground="Red"到边框时,TextBlock变为红色,仍然忽略样式(但现在使用边框中的颜色).TextBlock实际上已经在Style解决正确.但是尽管它不应该,它使用继承的值而不是样式中指定的值.我该如何解决这个问题?为什么会出现这个问题?
我在微软论坛上收到了回复; 我会把它留在这里以防有人遇到同样的问题.
不同之处在于TextBlock不是一个控件,即它没有任何ControlTemplate,因此当它位于StackPanel内部时,隐式样式不会应用于它.有关更多信息,请参阅以下页面:http: //blogs.msdn.com/b/wpfsdk/archive/2009/08/27/implicit-styles-templates-controls-and-frameworkelements.aspx
您可以使用Label元素或显式设置TextBlock元素的样式.
- 马格努斯(MM8)
| 归档时间: |
|
| 查看次数: |
3498 次 |
| 最近记录: |