将样式资源分配给DataGrid

时间:2014-03-20 07:32:59

标签: wpf xaml datagrid resources staticresource

对于这个问题可能有些朦胧的性质表示道歉,但我对WPF来说相当新,因此我在资源问题上苦苦挣扎。

我的问题是我有一个DataGrid,我希望为其描述一种描述属性的样式,例如FontSizeBackground / 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 个答案:

答案 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}" ...>