2012-05-23 21 views

cevap

7

Bunu yapmadım, GridView üzerinde bir ItemContainerStyleSelector kullanabilmeniz gerekir, yöntem size kapsayıcı (GridViewItem) ve bağlandığınız öğeyi verir. Buradan GridViewItem üzerinde IsEnabled özelliğini false olarak ayarlayabilir ve bu da onu seçilmez kılar.

Ayrıca, varsayılan GridViewItem stilinin devre dışı bırakılan öğenin nasıl görüneceğini özelleştireceğinden, muhtemelen özel bir stil seçmeniz gerekecektir.

Güncelleme DataTemplateSelector Çözüm

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

Bununla ilgili bir hata var gibi görünüyor. http://www.simonferquel.net/blog/archive/2012/03/14/windows-8--xaml-petit-bug-sur-itemscontrol-et-workaround.aspx – Michael

+0

Konteynerleri değiştirmede başarılı oldum Bir DataTemplateSelector kullanarak stil, bir kesmek biraz, ama ben zaten DTS kullanıyordum, böylece iki kuşu tek bir taşla öldürdüm. Cevabımı bu kodla güncelledim. –

+0

Tüm öğeleri tıklamak ve bazılarında seçimi sunmak istiyorsam ne yapmalıyım? Alternatif var mı? – oXeNoN

6

Nigel'in cevabı büyüktür. GridView öğelerinizi ItemsSource özelliği bağlayıcısını kullanarak doldurmayı kolaylaştırmak için WinRT XAML Toolkit'a eklenmiş bazı özellikler ekledim.

GridViewItem özelliklerini değiştirmenin normal yolu GridView.ItemContainerStyle özelliğini kullanıyordu. Bu yöntemi kullanarak, stil ve stil belirleyicileri kullanarak IsEnabled özelliğini belirtmeniz gerekir, WinRT'deki bağlamaları desteklemez. ItemContainerStyleSelector'ı kullanmak bir yol olabilir, ancak özel bir sınıf tanımlamak gerekir.

Ben böyle senin GridView.ItemTemplate herhangi kumanda üzerindeki ayarlayabilirsiniz bir IsEnabled özelliğiyle bir GridViewItemExtensions class yarattık: özellik atalarından görsel ağaç ve GridViewItem bulma davranışa sahip

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

IsEnabled değerini kendi soyundan ayarlanan GridViewItemExtensions.IsEnabled değerine eşitlenmesini sağlayarak. Daha sonra Nigel dediği gibi - hala bir GridViewItem öğesinden ayıklamanız ve değiştirilen öğeleri değiştirmemeniz için değiştirmeniz gerekir.

İlgili konular