Назначение стилевых ресурсов в DataGrid
Извиняюсь за возможно смутную природу этого вопроса, но я довольно новичок в 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>
Излишне говорить, что это не работает. Он не падает, но я не вижу никаких строк. Код, который я предоставил здесь, является уменьшенной версией того, что я написал для своего приложения, но основные принципы те же.
С уважением, Дэвид.
1 ответ
РЕДАКТИРОВАТЬ: не посмотрел внимательно на ваш код...:) так что для полноты
<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}" ...>