none
[自定义控件]在generic.xaml中定义的Style如何在同一个文件中使用? RRS feed

  • 问题

  •  

    <ResourceDictionary ...>


      <Style TargetType="TextBox">
        <Setter Property="Template" >
          <Setter.Value>
            <ControlTemplate>
              <Grid>
                  <Border  Style="{StaticResource MyBorder}">   ======>运行时出错,提示找不到MyBorder
                    <TextBlock Text="{TemplateBinding Text}"></TextBlock>
                  </Border>
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
     
        <Style x:Name="MyBorder" TargetType="Border">
          <Setter Property="BorderBrush" Value="Black"></Setter>
          <Setter Property="BorderThickness" Value="1"></Setter>
        </Style>
       
    </...>

     

    ===========

     

    比如上例中的="{StaticResource MyBorder}",运行时会提示找不到,要如何解决呢?

    2008年12月19日 18:37

答案

  • Code Snippet

      <Style TargetType="TextBox">
        <Setter Property="Template" >
          <Setter.Value>
            <ControlTemplate>
              <Grid>
                  <controls:MyBorder>                

                      <TextBlock Text="{TemplateBinding Text}"></TextBlock>
                  </controls:MyBorder>
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
     
        <Style TargetType="controls:MyBorder">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="controls:MyBorder">
                        <Border BorderBrush="Black" BorderThickness="1">
                            <ContentControl Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Cursor="{TemplateBinding Cursor}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStretch="{TemplateBinding FontStretch}" Foreground="{TemplateBinding Foreground}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

     

     

    这样绑定你的控件就行了,不能直接像UserControl绑定控件.当了回小白...楼主见谅,下次偶会注意看主题
    2008年12月24日 15:36
    版主

全部回复

  • sl2 rtw要放在 themes/generic.xaml下

    2008年12月24日 3:20
    版主
  •  

     

    我的问题您试过?

     

    用你的方式就可以了??

    2008年12月24日 7:18
  •  

    generic.xaml 在Silverlight Beta2之前直接放在项目下,在RTW时要放在 Theme目录下,

     

    http://forums.microsoft.com/china/ShowPost.aspx?PostID=4085141&SiteID=15 

     

    你可以看这篇文章 Breaking changes

    的部分,应该是你放的位置不对照着以前别人写的自定义控件写的所以出错的吧
    2008年12月24日 8:50
    版主
  • What's new in Silverlight 2 RC0 ????

     

     

    晕,官网专版的版主都这水平,够呛......

    2008年12月24日 9:49
  •  HiYouAll 写:

    What's new in Silverlight 2 RC0 ????

    晕,官网专版的版主都这水平,够呛......

    RC0只是在RC1也就是现在RTW发布前一周发布的.他们基本没有太大区别.

    只是让你参考一下,现在generic.xaml要放在themes下.一般照着以前教程(sl2 beta1 beta2)写CustomControl 的初学者都很容易犯这个错误,如果你的generic.xaml没放在themes 下就会出现找不到模板的提示,可能是我表达不清楚。

     

    水平不高还请见谅~!

    2008年12月24日 10:02
    版主
  • Code Snippet

     

      <Style TargetType="TextBox">
        <Setter Property="Template" >
          <Setter.Value>
            <ControlTemplate>
              <Grid>

                        <Border
                          Background="{TemplateBinding Background}"
                          BorderBrush="{TemplateBinding BorderBrush}"
                          BorderThickness="{TemplateBinding BorderThickness}"
                          CornerRadius="2"
                          Margin="{TemplateBinding Margin}">
                            <ContentControl
                              Content="{TemplateBinding Content}"
                              ContentTemplate="{TemplateBinding ContentTemplate}"
                              Cursor="{TemplateBinding Cursor}"
                              HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                              HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                              FontFamily="{TemplateBinding FontFamily}"
                              FontSize="{TemplateBinding FontSize}"
                              FontStretch="{TemplateBinding FontStretch}"
                              Foreground="{TemplateBinding Foreground}"
                              Margin="{TemplateBinding Padding}"
                              VerticalAlignment="{TemplateBinding VerticalAlignment}"
                              VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />

                                                     <TextBlock Text="{TemplateBinding Text}"></TextBlock>

                        </Border>
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>

     

     

    你要在自定义控件用Border属性,如上方法用 ,太忙了没仔细看清问题
    2008年12月24日 14:01
    版主
  • Code Snippet

      <Style TargetType="TextBox">
        <Setter Property="Template" >
          <Setter.Value>
            <ControlTemplate>
              <Grid>
                  <controls:MyBorder>                

                      <TextBlock Text="{TemplateBinding Text}"></TextBlock>
                  </controls:MyBorder>
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
     
        <Style TargetType="controls:MyBorder">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="controls:MyBorder">
                        <Border BorderBrush="Black" BorderThickness="1">
                            <ContentControl Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Cursor="{TemplateBinding Cursor}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStretch="{TemplateBinding FontStretch}" Foreground="{TemplateBinding Foreground}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

     

     

    这样绑定你的控件就行了,不能直接像UserControl绑定控件.当了回小白...楼主见谅,下次偶会注意看主题
    2008年12月24日 15:36
    版主