none
用Style设置Temple无法应用 RRS feed

  • 问题

  • 我自己做了一个控件 ,里面包含下面子控件

     

     

    <my:MoveThumb x:Name="PART_MoveThumb" Cursor="SizeAll" 
    Template="{StaticResource MoveThumbTemplate}" />
    

    默认使用如下Temple

     

     <ControlTemplate x:Key="MoveThumbTemplate" TargetType="{x:Type my:MoveThumb}">
      <Rectangle Fill="Transparent"/>
     </ControlTemplate>
    

     

    但是,当我动态添加控件的时候,需要动态设置这个子控件的Style,下面是我临时做的一个样式

     

     <Style x:Key="AAA" TargetType="my:MoveThumb">
      <Setter Property="Template">
       <Setter.Value>
        <ControlTemplate TargetType="my:MoveThumb">
         <Path IsHitTestVisible="True" Fill="Transparent" Stroke="Transparent"
           Data="M 0,20 L 30 0 L 60,20 L 30,40 Z"
           Stretch="Fill" Margin="1" MinWidth="35" MinHeight="20"/>
        </ControlTemplate>     
       </Setter.Value>
      </Setter>
      <Setter Property="Cursor" Value="ScrollAll"/>
      <Setter Property="Background" Value="Transparent"/>
     </Style>
    

     


    在控件的OnLoad函数里面,设置它的Style :

     

      void di_Loaded(object sender, RoutedEventArgs e)
      {
       DesignerItem di = sender as DesignerItem;
       MoveThumb mt = di.Template.FindName("PART_MoveThumb", di) as MoveThumb;
       mt.Style = di.FindResource("AAA") as Style;
       //mt.Template = di.FindResource("Decision_MoveThumbTemplate") as ControlTemplate;
      }
    

     


    我使用Snoop查看的时候发现,MoveThumb的Temple的内容依然是Rectangle而不是Path,当我使用

     

    mt.Template = di.FindResource("Decision_MoveThumbTemplate") as ControlTemplate;
    

     

    或者

     

    <my:MoveThumb x:Name="PART_MoveThumb" Cursor="SizeAll" />
    

     

    为他设置默认Template的时候,MoveThumb的Temple的内容就变成了Path。

    有人能解释一下么?

     

     


    2011年7月30日 1:27

答案

全部回复