2013-01-11 149 views
1

我試圖建立一個使用WPF的賓果遊戲模擬器來了解更多關於WPF的知識,而且我無法弄清楚如何以編程方式更改<ItemsControl>模板。以編程方式訪問UniformGrid ItemTemplate

我只使用VS 2010的默認WPF應用程序,所以我有一個MainWindow.xaml,App.xaml和MainWindow.xaml.cs。

我想訪問<ItemTemplate>的原因是,如果賓果號碼出現在選定的位置,則更改綁定的模板。

我試過this possible solution在我的代碼背後的文件,但我不認爲這在這種情況下工作。

這裏是我有我的主窗口和應用程序XAML文件設置

MainWindow.xaml

<ItemsControl Name="icBColumn" ItemsSource="{Binding CardBNumbers}" 
       Grid.Column="0" Grid.Row="2" 
       ItemTemplate="{StaticResource BingoSquare}" 
       ItemsPanel="{StaticResource BingoColumn}"> 

的App.xaml

<DataTemplate x:Key="BingoSquare"> 
    <Border Background="{DynamicResource UnmarkedSquare}"> 
    <Label Content="{Binding}" /> 
    </Border> 
</DataTemplate> 
<RadialGradientBrush x:Key="UnmarkedSquare" GradientOrigin="0.5,0.5" 
        Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5"> 
    <RadialGradientBrush.GradientStops> 
    <GradientStop Color="LimeGreen" Offset="1" /> 
    </RadialGradientBrush.GradientStops> 
</RadialGradientBrush> 
<ItemsPanelTemplate x:Key="BingoColumn"> 
    <UniformGrid Name="NumbersGrid" Columns="1" Rows="5"/> 
</ItemsPanelTemplate> 

回答

1

入住這link那裏你會發現代碼已經足夠接近你所需要的,但需要一些工作。

我會提出一些重建。

例如,您將ItemsControl的ItemsSource綁定到CardBNumbers。它是一個int列表還是一個CustomClass列表,例如BingoNumClass。如果它是一個自定義類,則添加一個布爾型的IsBingo布爾屬性,您將被忽略掉爲false。只要選擇了賓果號碼,它就會從您的代碼變爲真,並且您將更新CardBNumbers列表的項目。

然後,您可以在IsBingo屬性中使用Datatriggers將您的ItemTemplate擴展爲Chnage,只要它被選中 - 從您的CardBNumbers列表中變爲true。

+0

謝謝,我還沒有看過。我會檢查出來並回復給你。 – Zack

+0

我很早就想知道如果你在編輯中添加的東西是可能的!我只是不知道如何。目前Cardmine是一個列表。所以我在想,就像你說的那樣,創建一個代表賓果空間的新類,使用string number屬性和bool checked屬性! – Zack

+1

是的exaqctly。實現INotifyPropertyChanged接口,並且一旦更新了布爾值,您可以使用xaml樣式數據觸發器捕獲此事件。如果你希望我能更具體一些,我可以,但我會在星期一。銅! – iltzortz