0

グリッドのテキストの後ろに45°回転し、グリッドがTreeViewItem内にある長方形を描画しようとしています。これまでのところ、それを正しくするために何も機能していません...私はグリッドの背景も使用しようとしましたが、結果はありません。これが私をこれまでに得たコードです:

<Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TreeViewItem">
                <Grid Margin="0,5,0,0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <Rectangle Name="rect" Stretch="Uniform" Fill="{StaticResource ItemAreaBrush}" 
                                   Stroke="{StaticResource ItemBorderBrush}" StrokeThickness="1">
                        <Rectangle.RenderTransform>
                            <RotateTransform CenterX=".5" CenterY=".5" Angle="45" />
                        </Rectangle.RenderTransform>
                    </Rectangle>
                    <ContentPresenter ContentSource="Header" Grid.Row="0" />
                    <ItemsPresenter Grid.Row="1" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="true">
                        <!--<Setter TargetName="Bd" Property="Panel.Background" Value="{StaticResource SelectedItemAreaBrush}" />-->
                        <Setter TargetName="rect" Property="Rectangle.Stroke" Value="{StaticResource SelectedItemBorderBrush}" />
                        <Setter TargetName="rect" Property="Rectangle.StrokeThickness" Value="2" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

誰かがこの問題の途中で私を助けることができますか?

4

1 に答える 1

1

これを意味しましたか:

<ControlTemplate TargetType="TreeViewItem">
    <Grid Margin="0,5,0,0" Background="Orange">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Rectangle Name="rect"
                    Stretch="Uniform" Fill="Cyan" Stroke="Red" StrokeThickness="1"
                    Grid.Row="0">
            <Rectangle.LayoutTransform>
                <RotateTransform CenterX=".5" CenterY=".5" Angle="45" />
            </Rectangle.LayoutTransform>
        </Rectangle>

        <ContentPresenter ContentSource="Header" Grid.Row="0" />

        <ItemsPresenter Grid.Row="1" />
    </Grid>

    <ControlTemplate.Triggers>
        <Trigger Property="IsSelected" Value="true">
            <Setter TargetName="rect" Property="Rectangle.Stroke" Value="{StaticResource SelectedItemBorderBrush}" />
            <Setter TargetName="rect" Property="Rectangle.StrokeThickness" Value="2" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

アイテム テンプレートのスクリーンショット

RenderTransform を LayoutTransform に変更したことに注意してください。前者では、長方形が「水平に」レイアウトされ、他のすべてが配置された後にのみ向きが変わるため、下部で「オーバーフロー」していました。LayoutTransform は、CPU/GPU による処理が少し遅くなりますが、実際には変換後の新しいサイズを処理します。また、LayoutTransform を使用すると、Rectangle がセンタリング/マージン/その他になりやすいことに注意してください。

于 2012-08-31T10:03:29.380 に答える