2012-05-23 8 views

Respuesta

7

Aunque no he hecho esto, debería poder utilizar un ItemContainerStyleSelector en GridView, el método le proporciona el contenedor (GridViewItem) y el elemento al que se está vinculando. Desde allí, puede establecer la propiedad IsEnabled en el GridViewItem en falso, lo que hace que no se pueda seleccionar.

También es probable que deba seleccionar un estilo personalizado también, ya que el estilo predeterminado de GridViewItem personalizará el aspecto de un elemento deshabilitado.

actualización Solución DataTemplateSelector

public class IssueGridTemplateSelector : DataTemplateSelector 
{ 
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
    { 
     var selectorItem = container as SelectorItem; 

     if (item is Issue) 
      return IssueTemplate; 

     selectorItem.IsEnabled = false; 
     selectorItem.Style = RepositoryItemStyle; 

     return RepositoryTemplate; 
    } 

    public DataTemplate IssueTemplate 
    { 
     get; 
     set; 
    } 

    public DataTemplate RepositoryTemplate 
    { 
     get; 
     set; 
    } 

    public Style RepositoryItemStyle 
    { 
     get; 
     set; 
    } 
} 
+2

Parece que hay un error con eso. http://www.simonferquel.net/blog/archive/2012/03/14/windows-8--xaml-petit-bug-sur-itemscontrol-et-workaround.aspx – Michael

+0

Tuve éxito modificando los contenedores estilo usando un DataTemplateSelector también, algo así como un hack, pero ya estaba usando el DTS, así que maté a dos pájaros de un tiro. He actualizado mi respuesta con ese código. –

+0

¿Qué ocurre si deseo mantener todos los elementos en los que se puede hacer clic y presentar la selección en algunos de ellos? ¿Hay una alternativa? – oXeNoN

6

respuesta de Nigel es grande. Acabo de agregar algunas propiedades adjuntas al WinRT XAML Toolkit que deberían hacer que sea más fácil hacerlo si está completando su GridView utilizando el enlace de propiedad ItemsSource.

Para mí, la forma habitual de modificar las propiedades de GridViewItem era utilizar la propiedad GridView.ItemContainerStyle. Usando ese método necesitaría especificar la propiedad IsEnabled usando un estilo y los setters de estilo no son compatibles con los enlaces en WinRT. Usar ItemContainerStyleSelector puede ser de una sola manera, pero requiere definir una clase personalizada.

He creado una GridViewItemExtensions class con una propiedad IsEnabled que se puede establecer en cualquier control en su GridView.ItemTemplate así:

xmlns:xyzc="using:Xyzzer.WinRT.Controls" 
xyzc:GridViewItemExtensions.IsEnabled="{Binding IsEnabled}" 

La propiedad tiene un comportamiento de búsqueda de la GridViewItem en sus antepasados ​​árbol visual y manteniendo su valor IsEnabled sincronizado con el valor GridViewItemExtensions.IsEnabled establecido en su descendiente.

Luego, como dijo Nigel, aún necesita extraer la plantilla de un GridViewItem y modificarla para que los elementos desactivados no queden fuera de lugar.

Cuestiones relacionadas