通过索引在uniformgrid中绑定按钮

时间:2016-11-21 17:17:56

标签: c# wpf xaml

我的positionInt32[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>

1 个答案:

答案 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