0

列ヘッダーにマウスオーバーすると表示される画像があります。ただし、列ヘッダー領域の下に表示する必要があります。 ここに画像の説明を入力

それを作成することはできますが、下のセルと重なっています。こちらが画像です。 ここに画像の説明を入力

これが私のコードです:

    <Style TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="Height" Value="26" />
            <Setter Property="Width" Value="126" />
            <Setter Property="Foreground" Value="{DynamicResource ContrastWhiteBrush}" />
            <Setter Property="Background" Value="{DynamicResource ContentToGreyedOutBrush}" />
            <Setter Property="Template" Value="{StaticResource ColumnHeaderControlTemplate}" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="{DynamicResource GridHeaderMouseOverBrush}" />
                </Trigger>
                <Trigger Property="prism:DataGridProperties.IsMouseOverGridCellColumnHeader" Value="True">
                    <Setter Property="Background" Value="{DynamicResource GridHeaderMouseOverBrush}" />
                </Trigger>
            </Style.Triggers>

     <ControlTemplate x:Key="ColumnHeaderControlTemplate" TargetType="{x:Type DataGridColumnHeader}" >
    <AdornerDecorator>
        <Grid Background="{TemplateBinding Background}" x:Name="dgColumnHeader" Panel.ZIndex="10001">
            <ad:Interaction.Behaviors>
                <GridColumnHeaderControl:GridAdornerBehavior AdornerTemplate="{StaticResource AdornerDataTemplate}" Panel.ZIndex="19999">
                    <ad:Interaction.Triggers>
                        <ad:EventTrigger SourceName="dgColumnHeader" EventName="MouseEnter">
                            <ad:InvokeCommandAction CommandName="ShowAdornerCommand"/>
                        </ad:EventTrigger>
                        <ad:EventTrigger SourceName="dgColumnHeader" EventName="MouseLeave">
                            <ad:InvokeCommandAction CommandName="HideAdornerCommand"/>
                        </ad:EventTrigger>
                    </ad:Interaction.Triggers>
                </GridColumnHeaderControl:GridAdornerBehavior>
            </ad:Interaction.Behaviors>
            <Border x:Name="border" BorderBrush="Black" BorderThickness="0,0,1,1" Grid.ColumnSpan="1">
                <Rectangle Width="116" Margin="3,3,3,3" HorizontalAlignment="Center" RadiusX="7" RadiusY="7" x:Name="PART_Rectangle" Fill="{DynamicResource ContentOutofFocusBrush}"></Rectangle>
            </Border>
            <ContentPresenter x:Name="content"  HorizontalAlignment="Center"  VerticalAlignment="Center" Content="{TemplateBinding Content}" />
        </Grid>
    </AdornerDecorator>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter TargetName="PART_Rectangle" Property="Fill" Value="{DynamicResource ActiveItemBrush}" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

    <DataTemplate x:Key="AdornerDataTemplate">
    <Grid HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,13,0,0" Grid.ZIndex="99">
        <Button Content="X" Width="28" Height="26" Panel.ZIndex="10002" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ctrls:RhinoDataGrid}}, Path=RemoveSelectedColumnCommand}">
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
                    <Setter Property="Foreground" Value="Red"/>
                    <Setter Property="Background" Value="{DynamicResource GridHeaderMouseOverBrush}"/>
                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    <Setter Property="VerticalContentAlignment" Value="Center"/>
                    <Setter Property="FontWeight" Value="Heavy"></Setter>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Grid>
                                    <Border Background="{TemplateBinding Background}" CornerRadius="0,0,12,12" BorderThickness="1,0,1,1" BorderBrush="Black">
                                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                                          Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/>
                                    </Border>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Button.Style>
        </Button>
    </Grid>
</DataTemplate>

私の行ヘッダーがどのように機能しているか。私の行ヘッダーの幅は36で、閉じるボタンの幅は28で、左マージンは26です。そして、画像がセルと重なっていない方法もあります ここに画像の説明を入力

Plsは私が修正するのを手伝ってください. ありがとうディー

4

2 に答える 2

0

ヘッダーの高さは26です

 <Setter Property="Height" Value="26" />

高さが26を超える画像をどのように表示すると思いますか?

于 2012-05-01T13:19:24.897 に答える
0

「閉じる」ボタンを他のコントロールの上に表示するには、「ポップアップ」コントロールを追加し、「閉じる」ボタンをその子として追加する必要があります。最大 1 つの子を定義できます。これは任意の UIElement にすることができます。DatagridColumnHeader のマウス オーバー イベントのイベント トリガーを定義し、ポップアップ コントロールの「IsOpen = true」を設定する必要があります。例えば

<Popup Name="myPopup">
  <TextBlock Name="myPopupText" 
             Background="LightBlue" 
             Foreground="Blue">
    Popup Text
  </TextBlock>
</Popup>

以下のプロパティを設定して、期待される結果を取得することもできます。

AllowsTransparency="True" 
        Placement="Relative"
            PlacementTarget="{Binding ElementName=Border}" /* your control name */
            HorizontalOffset="0"
            VerticalOffset="60"
            PopupAnimation="Fade"
于 2012-05-02T20:16:43.947 に答える