关于WPF全局样式问题

人生就是赌 2012-10-29 02:48:44
大家好
我使用全局样式为TextBlock设置字体大小,如下:

<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="14"></Setter>
</Style>


设置以后,现象如下:
TextBlock可以在对象上设置其他字体大小,并产生了不同效果,而Button对象的FontSize,无论设置多少,都按14号显示,也就是全局设置的字体大小。

而如果我设置的全局对象不是TextBlock,而是button,则一切正常,如下:

<Style TargetType="{x:Type Button}">
<Setter Property="FontSize" Value="14"></Setter>
</Style>

...全文
700 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生就是赌 2012-12-07
  • 打赏
  • 举报
回复
引用 17 楼 jshi123 的回复:
把MainSkin.xaml改成: XML/HTML code?1234567891011121314<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.micros……
这个定义确实可以啊,什么原理呢?
jshi123 2012-11-20
  • 打赏
  • 举报
回复
把MainSkin.xaml改成:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:System="clr-namespace:System;assembly=mscorlib">
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="FontSize" Value="14"></Setter>
    </Style>
    <DataTemplate DataType="{x:Type System:String}">
        <TextBlock Text="{Binding}">
            <TextBlock.Resources>
                <Style TargetType="{x:Type TextBlock}"/>
            </TextBlock.Resources>
        </TextBlock>
    </DataTemplate>
</ResourceDictionary>
人生就是赌 2012-11-19
  • 打赏
  • 举报
回复
引用 15 楼 folinlaxia 的回复:
我按照你提供的code测试了下。发现WPF里面样式确实不像css一样是就近原则 楼主是想要达到什么效果呢?如果是要TextBlock和Button风格一致就给Button放到TextBlock里面 如果不一致就给Button拿出TextBlock自己定义的哇
就是不想一致啊,现在想把textblock统一为14号字体,而button使用12号字体 具体如何做呢?
folinlaxia 2012-11-01
  • 打赏
  • 举报
回复
我按照你提供的code测试了下。发现WPF里面样式确实不像css一样是就近原则

楼主是想要达到什么效果呢?如果是要TextBlock和Button风格一致就给Button放到TextBlock里面
如果不一致就给Button拿出TextBlock自己定义的哇
人生就是赌 2012-11-01
  • 打赏
  • 举报
回复
顶上去看看
人生就是赌 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
同学 你的项目是wpf的么 我按照你的试了下 也是ok的
<Button Content="这是字体" Width="150" Height="30" FontSize="10"></Button>
FontSize="10"换成 25 特别大的字体 你看看你的button是不是变了
如果不变的话 请你新建一个项目 什么都不要加 只添加这几个文件试试看看
这个是很简单的道理 不用太费神 ……
[/Quote]

我确实新建立的项目测试,请帮忙看看,谢谢
地址:
测试包
twilightnewmoon86 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
之前和楼主一样遇到过这个问题,就是出在textblock身上,你这么设的话,只要控件“里面”是用textblock来呈现文字内容的都会指向你这个style,你所说的指向button不会有这个问题是显然的,不会有控件“里面”拿button当装文字的容器。
[/Quote]

楼主button是自定义的吗?不是的话就忽视这段话...
lhx527099095 2012-10-30
  • 打赏
  • 举报
回复
同学 你的项目是wpf的么 我按照你的试了下 也是ok的
<Button Content="这是字体" Width="150" Height="30" FontSize="10"></Button>
FontSize="10"换成 25 特别大的字体 你看看你的button是不是变了
如果不变的话 请你新建一个项目 什么都不要加 只添加这几个文件试试看看
这个是很简单的道理 不用太费神 必须是后面的覆盖前面的定义
twilightnewmoon86 2012-10-30
  • 打赏
  • 举报
回复
之前和楼主一样遇到过这个问题,就是出在textblock身上,你这么设的话,只要控件“里面”是用textblock来呈现文字内容的都会指向你这个style,你所说的指向button不会有这个问题是显然的,不会有控件“里面”拿button当装文字的容器。
人生就是赌 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
我测试了下 没有遇到楼主遇到的情况 而且也不应该会有这种情况
楼主可以把代码贴全 我们看看
[/Quote]

这是资源样式代码

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="14"></Setter>
</Style>
</ResourceDictionary>


这是加载资源样式后台代码

using System.Windows;
using MvvmLight1.ViewModel;
using System;

namespace MvvmLight1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
/// <summary>
/// Initializes a new instance of the MainWindow class.
/// </summary>
public MainWindow()
{
InitializeComponent();
InitializeTheme();
}

private void InitializeTheme()
{
App.Current.Resources.MergedDictionaries.Add(Application.LoadComponent(new Uri("Skins/MainSkin.xaml", UriKind.Relative)) as ResourceDictionary);
}
}
}


这是前台代码

<Grid x:Name="LayoutRoot">
<StackPanel>
<TextBlock Text="这是字体"
FontWeight="Bold"
Foreground="Purple"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextWrapping="Wrap" />
<Button Content="这是字体" Width="150" Height="30" FontSize="10"></Button>
</StackPanel>
</Grid>


请大家看看
lhx527099095 2012-10-30
  • 打赏
  • 举报
回复
其实想想也比较合理
你想网页里设置css 的字体就是全局的哦

这里的话 要么就不要用全局的textblock样式了吧

我也没有其他的idea耶 帮你顶下 看看有米有人帮忙解决
人生就是赌 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
额试了下 我原来的测试项目代码少加了个Merge资源的句子
不好意思哦楼主
从现象上看只能是button的默认模板里面有了textblock
所以才会出现你的这种状况哦
[/Quote]

目前可有解决方法啊?
lhx527099095 2012-10-30
  • 打赏
  • 举报
回复
额试了下 我原来的测试项目代码少加了个Merge资源的句子
不好意思哦楼主
从现象上看只能是button的默认模板里面有了textblock
所以才会出现你的这种状况哦
人生就是赌 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
引用 8 楼 的回复:

引用 6 楼 的回复:
同学 你的项目是wpf的么 我按照你的试了下 也是ok的
<Button Content="这是字体" Width="150" Height="30" FontSize="10"></Button>
FontSize="10"换成 25 特别大的字体 你看看你的button是不是变了
如果不变的话 请你新建一个项目 什么都不要加 只添加……
[/Quote]

下载地址
lhx527099095 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 6 楼 的回复:
同学 你的项目是wpf的么 我按照你的试了下 也是ok的
<Button Content="这是字体" Width="150" Height="30" FontSize="10"></Button>
FontSize="10"换成 25 特别大的字体 你看看你的button是不是变了
如果不变的话 请你新建一个项目 什么都不要加 只添加这几个文件试试看看
这个……
[/Quote]

没发看 公司只能上csdn 你传到csdn上我下来看看?
lhx527099095 2012-10-29
  • 打赏
  • 举报
回复
我测试了下 没有遇到楼主遇到的情况 而且也不应该会有这种情况
楼主可以把代码贴全 我们看看
人生就是赌 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
因为Button的默认模板里面有TextBlock,所以也应用了你设置的TextBlock样式
[/Quote]
这个我觉得是不是也像css一样,离对象最近的,应该会覆盖其他的设置吧,关键是我直接设置button的fontsize,没有任何作用了
cheng2005 2012-10-29
  • 打赏
  • 举报
回复
因为Button的默认模板里面有TextBlock,所以也应用了你设置的TextBlock样式

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧