样式自定义控件

时间:2012-07-03 23:58:51

标签: c# wpf

我制作了自己的控件。一个来自DataGrid,另一个来自ContentControl。其中一个得到另一个,所以我尝试公开他们的属性,但因为我需要许多不同的控件我想为我的控件(从DataGrid继承的那个)制作一个样式并将该控件的属性设置为我的ContentControl。我只是编写了这样的代码,但它不起作用。任何人都知道我做错了什么?

<Style x:Key="CustomDataGridStyle"
       TargetType="{x:Type controls:CustomDataGrid}">
    <Setter Property="CurrentRow"
            Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:DataGridContainer}}, Path=SelectedItem, Mode=TwoWay}" />
    <Setter Property="CaptionVisibility"
            Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:DataGridContainer}}, Path=CaptionVisibility, Mode=TwoWay}" />
    <Setter Property="CaptionText"
            Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:DataGridContainer}}, Path=CaptionText, Mode=TwoWay}" />
    <Setter Property="RowValidationErrorTemplate"
            Value="{StaticResource BasicRowValidationErrorTemplate}" />
    <Setter Property="CurrentView"
            Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:DataGridContainer}}, Path=CurrentView, Mode=OneWayToSource}" />
    <Setter Property="CurrentColumnHeaderText"
            Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:DataGridContainer}}, Path=CurrentColumnHeader, Mode=OneWayToSource}" />
    <Setter Property="SelectedCellText"
            Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:DataGridContainer}}, Path=SelectedText, Mode=OneWayToSource}" />
    <Setter Property="IsDataGridFocused"
            Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:DataGridContainer}}, Path=HasFocus, Mode=OneWayToSource}" />
</Style>

我已经定义了我的控件

<controls:CustomDataGrid x:Key="DataGridOne" AutoGenerateColumns="True" x:Shared="False" ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}" />

和另一个

<controls:DataGridContainer Content="{StaticResource DataGridOne}" DataContext="{Binding Products}" 
                                            x:Name="dataGridOne" SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, 
                                        AncestorType={x:Type UserControl}},
                                        Path=DataContext.SelectedItem, Mode=TwoWay}" CaptionVisibility="Collapsed"/>

1 个答案:

答案 0 :(得分:0)

您的样式设置了x:Key属性。这意味着默认情况下它不会应用于该类型的所有控件。您应该删除Key属性以使样式默认并应用于所有CustomDataGrid控件,或者在CustomDataGrid定义中引用Style,如下所示:

<Window>
  <Window.Resources>
    <Style x:Key="CustomDataGridStyle" TargetType="{x:Type controls:CustomDataGrid}">
     ...
    </Style>
  </Window.Resources>

 <controls:CustomDataGrid ... Style="{StaticResource CustomDataGridStyle}" ... />
</Window>