首页 新闻 会员 周边

WPF数据模板中的Border不能自动套用样式吗?

0
悬赏园豆:20 [待解决问题]

在窗体的资源中,设置了 Border的样式(没指定key,只指定了TargetType),另外还设了一个DataTemplate,其中用到了Border,但是发现Border没有自动套用样式,这是什么回事?

<Window x:Class="MainWindow">
  <Window.Resources>  
  <!--Border的样式-->
    <Style  TargetType="Border">
      <Setter Property="HorizontalAlignment" Value="Stretch" />
      <Setter Property="VerticalAlignment" Value="Stretch" />
      <Setter Property="Background" Value="LightGray" />
      <Setter Property="BorderThickness" Value="2" />
      <Setter Property="SnapsToDevicePixels" Value="True" />
      <Setter Property="BorderBrush" Value="red" />
    </Style>

    <!--数据模板,其中包含了Border控件,想让它自动套用上面的样式-->
    <DataTemplate DataType="{x:Type  my:MyClass  }" >
      <Border >
      <TextBlock  Text="{Binding Path=FisrName}" />
      </Border>
    </DataTemplate>
  </Window.Resources>

 
 <!--使用数据模板,运行后可以发现,数据模板中的border控件没有套用样式-->
<Grid>
  <Button Name="button1"  Height="52"   Width="107">
      <my:MyClass FisrName="John" />
  </Button>
  </Grid>
</Window>
seewold的主页 seewold | 初学一级 | 园豆:109
提问于:2013-06-06 23:20
< >
分享
所有回答(1)
0

把style放到window的resource中,要么你就加个key,然后border  <Border Style="{StaticResource **}">

要么你就

   <Border >
                <Border.Style>
                    <Style  TargetType="Border">
                        <Setter Property="HorizontalAlignment" Value="Stretch" />
                        <Setter Property="VerticalAlignment" Value="Stretch" />
                        <Setter Property="Background" Value="LightGray" />
                        <Setter Property="BorderThickness" Value="2" />
                        <Setter Property="SnapsToDevicePixels" Value="True" />
                        <Setter Property="BorderBrush" Value="red" />
                    </Style>
                </Border.Style>
             
                    <TextBlock  Text="{Binding Path=FisrName}" />
            </Border>

否则把border的样式放到windows的resources中,template是找不到的

WuRang | 园豆:1730 (小虾三级) | 2013-06-07 10:40

我知道用key或直接把样式嵌套到数据模板里可以解决,但我就是不想这么做,因为这里的示例数据模板里只用了一个border,但实际应用中要用很多个border,这样一个一个的指定key也觉得有点麻烦,更不用说嵌套了。

另外,其他控件(比如textbox)的样式放在Windows的resource中,不用key在DataTemplate是可以自动套用到的,我就是想知道,为什么border不行。

支持(0) 反对(1) seewold | 园豆:109 (初学一级) | 2013-06-07 23:35

@seewold: 你可以给datatemplate设置样式,在这个样式里设置target是border的样式。

其他控件(比如textbox)的样式放在Windows的resource中,不用key在DataTemplate是可以自动套用到的,我就是想知道,为什么border不行。

这个问题需要再查阅一些资料,有消息后再通知你

支持(0) 反对(0) WuRang | 园豆:1730 (小虾三级) | 2013-06-08 09:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册