1

我正在尝试使用 WPF 构建一个宾果游戏模拟器以了解有关 WPF 的更多信息,但我无法弄清楚如何以<ItemsControl>编程方式更改模板。

我只使用 VS 2010 的默认 WPF 应用程序,所以我有 MainWindow.xaml、App.xaml 和 MainWindow.xaml.cs。

我想访问 , 的原因<ItemTemplate>是如果选择的宾果号码出现,则更改绑定模板。

我已经在我的代码隐藏文件中尝试了这种可能的解决方案,但我认为这在这种情况下不起作用。

这是我设置 MainWindow 和 App xaml 文件的方式

主窗口.xaml

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

应用程序.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>
4

1 回答 1

1

检查这个链接,你会发现代码足够接近你的需要,但需要一些工作。

我会提出一些重建。

例如,您将 ItemsControl 的 ItemsSource 绑定到 CardBNumbers。它是 int 列表还是 CustomClass 列表,例如 BingoNumClass。如果它是自定义类,则添加一个布尔 IsBingo 布尔属性,您将默认设置为 false。只要选择了宾果编号并且您将更新CardBnumbers列表项时,它将转向代码。

然后,您可以在 IsBingo 属性上使用 Datatriggers 扩展您的 ItemTemplate,以便在选择它后立即更改其外观 - 从您的 CardBNumbers 列表中变为 true。

于 2013-01-11T16:52:36.330 回答