2015-07-01 48 views
0


我在XAML中使用DataGrid。
我有一個爲鼠標懸停行定義的特定樣式。
這是通過<DataGrid.RowStyle>標籤的內容定義的。
XAML:如何從DataRow樣式觸發到DataGrid單元格設置器?

對於特定的列(最後一列),我想插入一個圖標,該圖標只在鼠標懸停時纔可見。要將其隱藏在默認狀態,我將前景色定義爲透明,在<DataGridTextColumn.CellStyle>標記內容中定義。

低於全球XAML

 <DataGrid.Columns> 

      <!-- FIRST COLUMN DECLARATION --> 
      <DataGridTextColumn Binding="{Binding Container}" Header="Container" Width="*"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="TextBlock"> 
         <Setter Property="VerticalAlignment" Value="Center" /> 
         <Setter Property="HorizontalAlignment" Value="Left" /> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 

      <!-- ICON COLUMN DECLARATION --> 
      <DataGridTextColumn Binding="{Binding Icon}" Header="" Width="30" CanUserResize="False"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="TextBlock"> 
         <Setter Property="VerticalAlignment" Value="Center" /> 
         <Setter Property="HorizontalAlignment" Value="Left" /> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 

       <!-- DECLARE THE SPECIFIC TRANSPARENT COLOR --> 
       <DataGridTextColumn.CellStyle> 
        <Style TargetType="DataGridCell" > 
         <Setter Property="Foreground" Value="Transparent"/> 
        </Style> 
       </DataGridTextColumn.CellStyle> 
      </DataGridTextColumn> 
     </DataGrid.Columns> 

     <!-- MOUSEOVER ROW STYLE, which is not taken in account by second column --> 
     <DataGrid.RowStyle> 
      <Style TargetType="DataGridRow"> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="#FF27222A"/> 
          <Setter Property="Foreground" Value="#FF31A4CF" />    
          <Setter Property="FontWeight" Value="ExtraBold" /> 
          <Setter Property="Cursor" Value="Hand"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
     </DataGrid.RowStyle> 
    </DataGrid> 

的問題是,在一個小區定義的樣式將覆蓋在一排中定義的樣式。在鼠標懸停的情況下也是這種情況,這意味着我的觸發器沒有考慮到該特定列(換句話說,最後一列的所有單元格)。

我試着用TargetName聲明一個Setter,如下所示,但是沒有成功使它工作,主要是因爲我不知道在哪裏設置x:Name而沒有在項目中觸發錯誤。

<Setter Property="Foreground" Value="#FF31A4CF" TargetName="IconCol" /> 

任何建議將不勝感激。

回答

0

好的。得到它的工作,但部分失敗,因爲我終於引入了C#代碼來處理單元格樣式。
我插入一些EventSetter爲的MouseEnter和鼠標離開在<DataGrid.RowStyle>標籤

下面是XAML更新部分:

<DataGrid.RowStyle> 
     <Style TargetType="DataGridRow" BasedOn="{StaticResource BaseDataGridRowStyle}"> 

       <EventSetter Event="MouseEnter" Handler="Row_MouseEnter"/> 
       <EventSetter Event="MouseLeave" Handler="Row_MouseLeave"/> 

       <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="Background" Value="#FF27222A"/> 
           <Setter Property="Foreground" Value="#FF31A4CF" /> 
           <Setter Property="FontWeight" Value="ExtraBold" /> 
           <Setter Property="Cursor" Value="Hand"/> 
         </Trigger> 

         <Trigger Property="IsSelected" Value="True"> 
           <Setter Property="Background" Value="#FF27222A" /> 
           <Setter Property="Foreground" Value="#FF31A4CF" /> 
           <Setter Property="FontWeight" Value="ExtraBold" /> 
         </Trigger> 
       </Style.Triggers> 
     </Style> 
</DataGrid.RowStyle> 

然後,當事件被分派到C#代碼,我直接訪問到所需的細胞爲了在MouseOver情況下應用專用風格

相關問題