关于这两个选项:
- @Fredrik Hedblad
试着在ResourceDictionary中添加以下内容:
<DataTemplate DataType="{x:Type sys:String}">
<TextBlock Text="{Binding}">
<TextBlock.Resources>
<Style TargetType="{x:Type TextBlock}"/>
</TextBlock.Resources>
</TextBlock>
</DataTemplate>
- @Ivan Krivyakov
最好不要覆盖TextBlock的默认样式。到目前为止,我想到的最好的方法是创建Control的样式,并将其应用于所有顶层窗口。
我建议采用另一种方法,使用附加依赖属性。
namespace AttachedProperties
{
public static class TextBlockExtensions
{
public static bool GetUseAppThemeStyle(DependencyObject obj)
{
return (bool)obj.GetValue(UseAppThemeStyleProperty);
}
public static void SetUseAppThemeStyle(DependencyObject obj, bool value)
{
obj.SetValue(UseAppThemeStyleProperty, value);
}
public static readonly DependencyProperty UseAppThemeStyleProperty =
DependencyProperty.RegisterAttached("UseAppThemeStyle", typeof(bool), typeof(TextBlockExtensions), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.Inherits));
}
}
注意:您可以将其默认设置为true或false
然后拥有命名空间:
xmlns:attachedProperties="clr-namespace:AttachedProperties"
制定默认样式:
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=(attachedProperties:TextBlockExtensions.UseAppThemeStyle), RelativeSource={RelativeSource Mode=Self}}" Value="True">
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
然后,如果您需要获取默认设置,只需在样式中设置附加属性即可:
<Style x:Key="blueButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="attachedProperties:TextBlockExtensions.UseAppThemeStyle" Value="False" />
<Setter Property="Foreground" Value="Blue" />
</Style>
或者直接在按钮上:
<Button attachedProperties:TextBlockExtensions.UseAppThemeStyle="False" Foreground="Blue">I'm blue da ba dee da ba die...</Button>
AccessText
替代TextBlock
以保留键盘快捷键功能。 - Joachim Mairböck