Dot-Net

在滑鼠懸停時更改周圍邊框的樣式

  • June 1, 2012

我周圍有Grid一個。Border滑鼠懸停在 上時Grid,我想更改 上的樣式Border。我該怎麼做呢?這是我嘗試過的,到目前為止沒有任何成功:

<Border Name="Border" BorderBrush="Transparent" BorderThickness="1" CornerRadius="2">
   <Grid>
       <Grid.Style>
           <Style TargetType="{x:Type Grid}">
               <Style.Triggers>
                   <Trigger Property="IsMouseOver" Value="True">
                       <Setter TargetName="Border" Property="BorderBrush" Value="#FFB9D7FC" />
                   </Trigger>
               </Style.Triggers>
           </Style>
       </Grid.Style>

       <Grid.ColumnDefinitions>
           <ColumnDefinition />
           <ColumnDefinition />
       </Grid.ColumnDefinitions>

       ...
   </Grid>
</Border>

在嘗試建構此 XAML 時,我收到錯誤

無法在樣式設置器上設置 TargetName 屬性。

但我想不出任何其他方法來做到這一點。幫助將不勝感激。使用任何程式碼隱藏都是不可能的。

您需要執行以下操作:

  1. 從邊框定義中刪除 BorderBrush。觸發器可以覆蓋樣式中設置器設置的屬性,但不能覆蓋標籤中直接設置的屬性。
  2. 將觸發器放入邊框而不是網格(請參閱其他人提供的範例)。
  3. 關於 Grid 上的命中測試:在網格後面放置一個透明框,以便始終擷取 MouseOver:

第 3 點的程式碼範例:

<Grid>
   <Rectangle Fill="Transparent" /><!-- make sure that the mouse is always over "something" --> 
   <Grid Name="myGrid">       
       <Grid.ColumnDefinitions> 
           <ColumnDefinition /> 
           <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Name="myText">sadasdsa</TextBlock> 
   </Grid> 
</Grid>

引用自:https://stackoverflow.com/questions/2145700