在窗体的资源中,设置了 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>
把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是找不到的
我知道用key或直接把样式嵌套到数据模板里可以解决,但我就是不想这么做,因为这里的示例数据模板里只用了一个border,但实际应用中要用很多个border,这样一个一个的指定key也觉得有点麻烦,更不用说嵌套了。
另外,其他控件(比如textbox)的样式放在Windows的resource中,不用key在DataTemplate是可以自动套用到的,我就是想知道,为什么border不行。
@seewold: 你可以给datatemplate设置样式,在这个样式里设置target是border的样式。
其他控件(比如textbox)的样式放在Windows的resource中,不用key在DataTemplate是可以自动套用到的,我就是想知道,为什么border不行。
这个问题需要再查阅一些资料,有消息后再通知你