对于这个问题可能有些朦胧的性质表示道歉,但我对WPF来说相当新,因此我在资源问题上苦苦挣扎。
我的问题是我有一个DataGrid
,我希望为其描述一种描述属性的样式,例如FontSize
和Background
/ Foreground
颜色(当鼠标悬停在行上)。我可以成功完成如下:
<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Name="DataGrid1" ItemsSource="{Binding Path=Fibers}">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="FontSize" Value="12"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="FiberNo" />
<DataGridTextColumn Header="Fiber" />
<DataGridTextColumn Header="Connection" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
但我知道/希望必须有一种方法可以将此RowStyle
定义为单独的资源,然后从DataGrid
定义本身引用此资源(通过名称)。因此,我尝试在引用它的Window.Resources
内创建DataGrid
标记和标记。
请参阅以下内容:
<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataGrid x:Key="MyDataGridStyle">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="FontSize" Value="12"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
</Window.Resources>
<Grid>
<DataGrid Name="DataGrid1" ItemsSource="{Binding Path=Fibers}">
<StaticResource ResourceKey="MyDataGridStyle"/>
<DataGrid.Columns>
<DataGridTextColumn Header="FiberNo" />
<DataGridTextColumn Header="Fiber" />
<DataGridTextColumn Header="Connection" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
毋庸置疑,这不起作用。它没有崩溃,但我也没有看到任何行。我在这里提供的代码是我为我的应用程序编写的缩小版本,但基本要素是相同的。
此致 大卫。
答案 0 :(得分:6)
编辑:没仔细看你的代码...... :)所以为了完整性
<Window.Resources>
<Style x:Key="MyDataGridStyle" TargetType="DataGridRow">
<Setter Property="FontSize" Value="12"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<DataGrid Name="DataGrid1"
ItemsSource="{Binding Path=Fibers}"
RowStyle="{StaticResource MyDataGridStyle}" ...>