我的position
为Int32[2]
,表示网格上的某个位置,因此x坐标为position[0]
,y坐标为position[1]
。我还有UniformGrid
,见下文。位置可以改变,我希望网格上的按钮(其坐标存储在位置上)为绿色。因此,如果position的坐标为[0,0]
,则网格上的左上角按钮应为绿色。如果位置移至[0,1]
,则绿色背景应移动到那里,网格上的[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 :(得分: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 Binding="{Binding IsGreen}" Value="True">
<Setter Property="Background" Value="Green" />
</DataTrigger>
并在位置更改时设置适当的Field's
标志,例如:GetField(x,y).IsGreen= true