2017-05-04 67 views
1

如果我有一个WPF DataGrid中,看起来像这样:WPF绑定外部样式不XAML标记

<DataGrid x:Name="DataGridQ" AutoGenerateColumns="False" Grid.ColumnSpan="2"> 
    <DataGrid.Resources> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Setter Property="Background" Value="#3f3f3f" />         
     </Style> 
    </DataGrid.Resources> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
     <DataGridTextColumn Header="Name2" Binding="{Binding Name2}"/> 
    </DataGrid.Columns> 
</DataGrid> 

,如果我想从一个外部的样式表样式的DataGrid和风格绑定到网格,我写这样的风格:

<Style TargetType="{x:Type DataGrid}" x:Key="DataGridstyle"> 
    <Setter Property="BorderBrush" Value="#FF636363" />  
</Style> 

,并将其绑定这样的:

<DataGrid {StaticResource DataGridstyle}" /> 

这很好,但如果我想斌d到DataGrid的行我实际上没有在上面的XAML中创建绑定的标记,因此必须在网格内执行<DataGrid.Resources>中的样式。是否可以创建绑定到外部样式资源,尽管没有DataGrid行的XAML标记?

编辑:什么我要去了我的想法:

<DataGridRow {StaticResource DataGridRowstyle}" /> 

但由于行从DataGrid列内的结合创造了这个是不可能的。因此,有没有我“数据网格行”标签附加到

+0

用一些示例代码/标记来解释你正试图实现的目标? – AnjumSKhan

回答

1

试试这个:

<Window x:Class="WpfApp10.Window3" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     xmlns:local="clr-namespace:WpfApp10" 
     mc:Ignorable="d" 
     Title="Window3" Height="300" Width="300"> 
    <Window.Resources> 

     <x:Array x:Key="array1" Type="{x:Type sys:String}"> 
      <sys:String>Row 1</sys:String> 
      <sys:String>Row 2</sys:String> 
      <sys:String>Row 3</sys:String> 
     </x:Array> 

     <Style x:Key="DataGridRowStyle1" TargetType="{x:Type DataGridRow}"> 
      <Setter Property="Background" Value="#3f3f3f" /> 
      <Setter Property="Foreground" Value="White"/> 
     </Style> 

    </Window.Resources> 

    <Grid> 
     <DataGrid x:Name="DataGridQ" 
        ItemsSource="{StaticResource array1}" 
        RowStyle="{StaticResource DataGridRowStyle1}" 
        AutoGenerateColumns="False"> 

      <DataGrid.Columns> 
       <DataGridTextColumn Header="Name" Binding="{Binding}"/> 
       <DataGridTextColumn Header="Name2" Binding="{Binding}"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

enter image description here

+0

多数民众赞成它,完美的感谢! – Whirlwind991

+0

@ Whirlwind991:非常欢迎! – jsanalytics

0

装订样式可以使用MergedDictionaries

<Grid.Resources> 
    <ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="MyResourceDictionary.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    ... <Some other resources> ... 
    </ResourceDictionary> 
</Grid.Resources> 

MyResourceDictionary可以关注一下:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style TargetType="..." BasedOn="..."> 
    ... 
    </Style> 
    ... 
</ResourceDictionary>