2

私はwpfにグリッドを持っています。長方形にマウスオーバーすると、色の変化が見られます。しかし、コンテンツにマウスオーバーすると、元の長方形の色が表示されます。

ContentPresenterに同じマウスオーバー効果を適用するには何を書く必要がありますか、またはコンテンツプレゼンターのマウスオーバーで長方形の背景色を変更する方法はありますか?

<Grid Background="{TemplateBinding Background}" x:Name="dgColumnHeader">
         <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">
                    <Rectangle.Style>
                        <Style TargetType="{x:Type Rectangle}">
                            <Setter Property="Fill" Value="{DynamicResource ContentOutofFocusBrush}"></Setter>
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Fill" Value="{DynamicResource ActiveItemBrush}" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Rectangle.Style>
                </Rectangle>
            </Border>
            <ContentPresenter x:Name="content"  HorizontalAlignment="Center"  VerticalAlignment="Center" Content="{TemplateBinding Content}" />
        </Grid>

ありがとうディー

4

2 に答える 2

3

グリッドがコントロールテンプレートの一部である場合は、長方形スタイルのトリガーをControlTemplate.Triggersに移動することをお勧めします。

<Window x:Class="Presentation2.MouseOverRectangleWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MouseOverRectangleWindow" Height="300" Width="300">
  <Window.Resources>
    <SolidColorBrush x:Key="ContentOutofFocusBrush" Color="Orange"/>

    <SolidColorBrush x:Key="ActiveItemBrush" Color="Blue" />

    <Style x:Key="MouseOverContentControlStyle" TargetType="{x:Type ContentControl}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="ContentControl">
            <Grid Background="{TemplateBinding Background}" x:Name="dgColumnHeader">
              <Border x:Name="border" BorderBrush="Black" BorderThickness="0,0,1,1" Grid.ColumnSpan="1">
                <Rectangle x:Name="PART_Rectangle" Width="116" Margin="3,3,3,3" HorizontalAlignment="Center" RadiusX="7" RadiusY="7">
                  <Rectangle.Style>
                    <Style TargetType="{x:Type Rectangle}">
                      <Setter Property="Fill" Value="{DynamicResource ContentOutofFocusBrush}"></Setter>
                    </Style>
                  </Rectangle.Style>
               </Rectangle>
              </Border>
             <ContentPresenter x:Name="content" HorizontalAlignment="Center"  VerticalAlignment="Center" Content="{TemplateBinding Content}" />
           </Grid>
           <ControlTemplate.Triggers>
             <Trigger Property="IsMouseOver" Value="True">
               <Setter TargetName="PART_Rectangle" Property="Fill" Value="{DynamicResource ActiveItemBrush}" />
             </Trigger>
           </ControlTemplate.Triggers>
         </ControlTemplate>
      </Setter.Value>
  </Setter>
</Style>
</Window.Resources>
   <Grid>
     <ContentControl Style="{StaticResource MouseOverContentControlStyle}">
       <TextBlock Text="Hello World!" />
     </ContentControl>
   </Grid>
</Window>
于 2012-05-01T06:07:17.350 に答える
2

境界線の内側に長方形は必要ありません。境界線の背景を変更すると、同じ結果になります。次に、ContentPresenterをその境界線の内側に配置し、MouseOverハンドラーを境界線に設定すると、正常に機能するはずです。

于 2012-05-01T09:14:32.957 に答える