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>

質問に答えるには、Resources セクションを分離したい場所ならどこでも Grid コントロール (または 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 に答える