0

在 WPF 中是否有像 HTML div 这样的容器(这很容易),我可以在其中定位该容器中的所有文本块?所以我不必在每个文本块上指定样式

我有一个复杂的画布,我只想在一个区域中定位文本块。

与此有关的东西(除了 StackPanel 之外的东西可以用作样式定位容器):

            <StackPanel>
            <StackPanel.Resources>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Foreground" Value="White"></Setter>
                    <Setter Property="FontFamily" Value="Arial"></Setter>
                </Style>
            </StackPanel.Resources>

            <TextBlock Canvas.Left="87" Canvas.Top="210">
            mytext1
            </TextBlock>
            <TextBlock Canvas.Left="87" Canvas.Top="232">
            mytext2
            </TextBlock>
            <TextBlock Canvas.Left="87" Canvas.Top="254">
            mytext2
            </TextBlock>
        </StackPanel>

因此,如果我尝试使用网格,画布坐标将被忽略,并且我的文本块出现在画布的顶部。

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
<Canvas Width="500" Height="500">
    <Grid>
        <Grid.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="Foreground" Value="Red"></Setter>
            </Style>
        </Grid.Resources>
    <TextBlock Text="MyTextBlock1" Canvas.Left="300" Canvas.Top="300">
    </TextBlock>
    </Grid>
</Canvas>

4

1 回答 1

0

在这种情况下,您使用画布坐标在左侧提供 87 个间距,在元素顶部之间提供 22 个间距。StackPanel 已经在一个接一个地布置项目。你只需要为你的文本块设置边距

    <StackPanel>
        <StackPanel.Resources>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Foreground" Value="Red"></Setter>
                <Setter Property="FontFamily" Value="Arial"></Setter>
                <Setter Property="FontSize" Value="14" />
                <Setter Property="Margin" Value="87,4, 0, 4" />
            </Style>
        </StackPanel.Resources>
        <TextBlock>mytext1</TextBlock>
        <TextBlock>mytext2</TextBlock>
        <TextBlock>mytext3</TextBlock>
    </StackPanel>

要回答您的问题,您可以在希望隔离资源部分的任何地方使用网格控件(或 Canvas 或任何其他元素)。Grid 不执行任何布局。

<StackPanel>
        <StackPanel.Resources>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Foreground" Value="White"></Setter>
                <Setter Property="FontFamily" Value="Arial"></Setter>
            </Style>
        </StackPanel.Resources>

        <TextBlock>
            mytext1
        </TextBlock>
        <Canvas>
            <Canvas.Resources>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Foreground" Value="Red"></Setter>
                    <Setter Property="FontFamily" Value="Times"></Setter>
                </Style>
            </Canvas.Resources>
            <TextBlock Canvas.Left="87" Canvas.Top="210">mytext2</TextBlock>
            <TextBlock Canvas.Left="87" Canvas.Top="232">mytext2</TextBlock>
        </Canvas>
    </StackPanel>
于 2012-07-04T16:04:58.790 回答