2016-11-21 36 views
0

我有一個position作爲Int32[2]它代表網格上的某個位置,所以x座標是position[0],y座標是position[1]。我也有一個UniformGrid,見下文。位置可以改變,並且我想讓座標存儲在位置上的網格上的按鈕變爲綠色。所以如果位置的座標爲[0,0],那麼網格左上角的按鈕應該是綠色的。如果位置移動到[0,1],greenbackround應該移動到那裏,網格上的[0,0]應該變回白色。我該如何綁定這個?統一網格中的裝訂按索引

在XAML中網格看起來是這樣的,在一定的背景顏色已被設置(綠色移動圖形不能在非白色區域步驟):

 <ItemsControl Grid.Column="2" ItemsSource="{Binding Fields}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <UniformGrid Rows="{Binding Size}" Columns="{Binding Size}" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Button Focusable="False" RenderTransformOrigin="0.5, 0.5" Width="30" Height="25" FontSize="24" FontWeight="Bold"> 
        <Button.Style> 
         <Style TargetType="Button"> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding Text}" Value="k"> 
            <Setter Property="Background" Value="Yellow" /> 
           </DataTrigger> 
            <DataTrigger Binding="{Binding Text}" Value="f"> 
            <Setter Property="Background" Value="White" /> 
           </DataTrigger> 
            <DataTrigger Binding="{Binding Text}" Value="g"> 
             <Setter Property="Background" Value="Red" /> 
            </DataTrigger> 
            <DataTrigger Binding="{Binding Text}" Value="w"> 
             <Setter Property="Background" Value="Black" /> 
            </DataTrigger> 
           </Style.Triggers> 
         </Style> 
        </Button.Style> 
       </Button> 
      </DataTemplate> 
      </ItemsControl.ItemTemplate> 

回答

0

我假設你有你的Fields集合定義相似對這樣的事情:

ObservableCollection<Field> Fields { get; set; } 

與類:

public class Field 
    { 
     public string Text { get; set; } 
     .... 
     public bool IsGreen{get;set;}//add with PropertyChanged event 
    } 

然後你只需要添加另一個datatrigger去年:

<DataTrigger Binding="{Binding IsGreen}" Value="True"> 
    <Setter Property="Background" Value="Green" /> 
</DataTrigger> 

,並設置適當的Field's標誌時,位置改變e.g:GetField(x,y).IsGreen= true