如何在XAML中的样式中设置控件资源字典?

3

我有一个使用Silverlight的用户界面,它包含一些边框和一个放置在边框内的文本块。其他文本块则在边框外。

<Border>
    <TextBlock>This text should be centered</TextBlock>
</Border>

<Border>
    <TextBlock>This one too</TextBlock>
</Border>

<TextBlock>this one shouldn't</TextBlock>

我想要实现的是在边框内部格式化所有的TextBlock,而不必在每个TextBlock中设置样式。如果使用CSS,类似于以下内容:.border .textBlock { (...) } 我知道可以在边框的范围内设置样式:
<Border>
    <Border.Resources>
        <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultTextBlockStyle}">
            <Setter Property="HorizontalAlignment" Value="Center"></Setter>    
        </Style>
    </Border.Resources>
    <TextBlock>Centered Text</TextBlock>
</Border>

但是我仍然需要设置每个边框。现在我提出了一个问题,我能否在样式中设置 <BorderThickness> ,以便一次性设置影响所有边框?我尝试了下面的代码,但它没有起作用。它没有给我任何错误提示,但也没有影响的格式。

<Style TargetType="Border">
    <Setter Property="Resources">
        <Setter.Value>
            <ResourceDictionary>
                <Style TargetType="TextBlock">
                    <Setter Property="HorizontalAlignment" Value="Center" />  
                </Style>
            </ResourceDictionary>
        </Setter.Value>
    </Setter>
</Style>     
1个回答

4

试试这个:

<Style TargetType="Border">
    <Style.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="HorizontalAlignment" Value="Center" />
        </Style>
    </Style.Resources>
</Style>

这个在WPF中可行。但在Silverlight中,恐怕无法实现。


在Silverlight中无法运行,就像你说的那样我收到了消息:“成员“Resources”未被识别或无法访问。” - Marlon
在Silverlight中,对于你的问题,答案很简单,就像我在回答中所说的那样,不支持你想要做的事情。 - mm8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接