我在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" />
任何建議將不勝感激。