Estilo de control personalizado

Hice mis propios controles. uno hereda de DataGrid y el otro de ContentControl. Uno de ellos obtiene al otro, así que trato de exponer sus propiedades, pero como necesito muchos controles diferentes, quiero crear un Estilo para mi control (el que hereda de DataGrid) y establezca las propiedades de este control en mi ContentControl. Acabo de escribir el código así pero no funciona. Cualquier cuerpo sabe lo que estoy haciendo mal?

<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>

Y he definido mi control así

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

y el otro

<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"/>

preguntado el 04 de julio de 12 a las 00:07

1 Respuestas

Su estilo tiene establecido el atributo x:Key. Esto significa que no se aplicará a todos los controles de ese tipo de forma predeterminada. Debe eliminar el atributo Clave para hacer que el estilo sea el predeterminado y aplicarlo a todos los controles CustomDataGrid, o hacer referencia al Estilo en la definición de CustomDataGrid de esta manera:

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

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

Respondido 05 Jul 12, 19:07

Ya lo intento. Y he definido mi CustomDataGrid también como un recurso, ¿crees que es mi problema? ¿No puedo asignar un estilo a otro control dentro de mi recurso? - Nandhi

Cree un setter sin enlace pero con un valor simple. Compruebe si esto funciona. El problema puede ser diferente de lo que crees que es. - Iván Nikitin

intento con algo asi <Style x:Key="CustomDataGridStyle" TargetType="{x:Type controls:RaceUIDataGrid}"> <Setter Property="IsDataGridReadOnly" Value="True"/> </Style> y funciona, pero lo que necesito es exponer las propiedades de CustomDataGrid a DataGridContainer: Nandhi

Esto no puede ser posible :(. Tenía un mal enfoque de lo que estaba haciendo. El setter es solo para establecer una variable con un valor, no para darle referencias. Nandhi

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.