WPF,请问模板的一个问题

答复答复 2013-07-19 06:46:56
<Style TargetType="{x:Type TextBlock}">
...
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBlock"> //TextBlock的模板
...
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>


<Style TargetType="{x:Type Button}">
...
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button"> //Button的模板
...
...
<TextBlock>....</TextBlock> //模板中用到了TextBlock
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>


上面有两个模板,一个TextBlock模板,一个是Button模板,在Button模板中用到了TextBlock控件。

我想问的是:
1:Button模板中的TextBlock,到底是上面创建的TextBlock的样式呢,还是TextBlock的标准模板的样式?
2:如果要使用上面创建的TextBlock的样式该怎么做?如果要使用TextBlock的标准模板的样式该怎么做?
...全文
202 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2013-07-21
  • 打赏
  • 举报
回复
指定Style的,用特定样式,不指定Style的,用默认样式。通过TargetType将改变默认样式,但是会看你的TargetType出现的位置,WPF有继承性,如果两者无关系,则不受影响,如果TextBlock的样式指定出现在Button的上级,则受到影响。
  • 打赏
  • 举报
回复
这就好比如说你在方法x中定义了变量y,然后方法x之外也有全局作用域的变量y,你认为你看到的y是哪个y?
zjzhong 2013-07-20
  • 打赏
  • 举报
回复
定义在资源中,然后绑定。
DENQH 2013-07-20
  • 打赏
  • 举报
回复

<Style x:Key="bl" TargetType="{x:Type TextBlock}">

<Style TargetType="{x:Type Button}">
   ...
   ...
    <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="Button">  //Button的模板
                 ...
               ...
               <TextBlock Style="{DynamicResource bl}">....</TextBlock> //模板中用到了TextBlock
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>
答复答复 2013-07-20
  • 打赏
  • 举报
回复
有人知道吗.............
ariesget 2013-07-20
  • 打赏
  • 举报
回复
引用 8 楼 u011455335 的回复:
[quote=引用 7 楼 ariesget 的回复:] <Style TargetType="{x:Type TextBlock}"> 你这设置的是对所有的TextBlock应用这个样式,那么不管是不是在模板里,只要是TextBlock并且没有特别指定一个Style都会应用这个样式。 如果想用默认的模板,就把这个Style加个Key,然后只在想应用这个Style上使用就好
那我的代码中,Button模板中的TextBlock就应该使用的是设置的TextBlock的模板吧?[/quote] 是的,其实这些你自己去测试下,1,2分钟的事情啊...
答复答复 2013-07-20
  • 打赏
  • 举报
回复
引用 7 楼 ariesget 的回复:
<Style TargetType="{x:Type TextBlock}"> 你这设置的是对所有的TextBlock应用这个样式,那么不管是不是在模板里,只要是TextBlock并且没有特别指定一个Style都会应用这个样式。 如果想用默认的模板,就把这个Style加个Key,然后只在想应用这个Style上使用就好
那我的代码中,Button模板中的TextBlock就应该使用的是设置的TextBlock的模板吧?
ariesget 2013-07-20
  • 打赏
  • 举报
回复
<Style TargetType="{x:Type TextBlock}"> 你这设置的是对所有的TextBlock应用这个样式,那么不管是不是在模板里,只要是TextBlock并且没有特别指定一个Style都会应用这个样式。 如果想用默认的模板,就把这个Style加个Key,然后只在想应用这个Style上使用就好
答复答复 2013-07-20
  • 打赏
  • 举报
回复
引用 2 楼 DENQH 的回复:

<Style x:Key="bl" TargetType="{x:Type TextBlock}">

<Style TargetType="{x:Type Button}">
   ...
   ...
    <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="Button">  //Button的模板
                 ...
               ...
               <TextBlock Style="{DynamicResource bl}">....</TextBlock> //模板中用到了TextBlock
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>
TextBlock的样式不是设置了TargetType="{x:Type TextBlock}"的吗,就算是不用x:key,Button模板中的TextBlock也应该是定义的TextBlock的样式吧

110,561

社区成员

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

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

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