先上圖吧:
為了便于看清楚,我的MyGridView的SelectionMode= "Multiple".可以可按到第二個選項是灰色的,不能點擊了。

1. 首先,在你的數據源中添加一個bool類型的標識,假設我們的數據源為DataItem類型:
1 1 public ref class DataItem
2 2 {
3 3 public:
4 4 DataItem();
5 5 property bool Disabled;
6 6 };
2. 重新寫一個新類,基類為GridView,重寫它的
PrepareContainerForItemOverride方法
1 public ref class MyGridView sealed: GridView
2 {
3 public:
4 protected:
5 virtual void PrepareContainerForItemOverride( DependencyObject^ element,Platform::Object^ item ) override
6 {
7 GridView::PrepareContainerForItemOverride(element, item);
8 //獲得數據
9 auto viewMode = (DataItem^)(item);
10 //可以轉換成UIElement
11 UIElement^ uiElement = safe_cast<UIElement^>(element);
12 //也可以轉換成GridViewItem類型,為了使用IsEnable屬性,我們暫時轉換為GridViewItem類型
13 GridViewItem^ gridViewItem = safe_cast<GridViewItem^>(element);
14 //設置該項的GridView的IsEnable屬性
15 gridViewItem->IsEnabled = viewMode->Disabled;
16
17 //下面的代碼是實現一個可變尺寸的GridView
18 Binding^ colBinding = ref new Binding();
19 colBinding->Source = viewMode;
20 colBinding->Path = ref new PropertyPath(this->ColumnSpanProperty);
21 BindingOperations::SetBinding(uiElement,Windows::UI::Xaml::Controls::VariableSizedWrapGrid::ColumnSpanProperty, colBinding);
22
23 Binding^ rowBinding = ref new Binding();
24 rowBinding->Source = viewMode;
25 rowBinding->Path = ref new PropertyPath(this->RowSpanProperty);
26 BindingOperations::SetBinding(uiElement, Windows::UI::Xaml::Controls::VariableSizedWrapGrid::RowSpanProperty, rowBinding);
27 }
28 }
29 };
然后只要在跟我們的MyGridView綁定的數據源中設置Disabled屬性就可以了
MainPage::MainPage()
{
//保存了一個DataItem的Vector
DataItemVector^ databox = ref new DataItemVector();
for(int i = 0; i < 10; i++)
{
DataItem^ myData = ref new DataItem();
if(i == 1)
myData->Disabled = true;
databox->ItemVector->Append(myData);
}
//MyGridView的對象,在XAML文件中初始化的
myGridView->ItemSource = databox;
}
posted on 2013-01-10 11:02
Dino-Tech 閱讀(1350)
評論(0) 編輯 收藏 引用 所屬分類:
Windows 8