次のように定義された2つの画像があります。
Image Wall = new Image();
Wall.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/Wall.png"));
Image Corridor = new Image();
Corridor.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/Corridor.png"));
均一なグリッドがあり、その各セルにボタンがあります。私の目標は、DataTrigger 条件に基づいて、これらのボタンのそれぞれにこれらの画像の 1 つを表示することです。コードは実行されていますが、画像が表示されず、「リソース "Corridor" を解決できませんでした」と「リソース "Wall" を解決できませんでした」という 2 つの警告が表示されます。ここに私のxamlコードがあります:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Fields}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding TableSize}" Columns="{Binding TableSize}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Command="{Binding SelectCommand}" CommandParameter="{Binding Number}" BorderThickness="0">
<Button.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1" />
</Button.RenderTransform>
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding Background}" Value="Corridor">
<Setter Property="Foreground" Value="{DynamicResource Corridor}" />
</DataTrigger>
<DataTrigger Binding="{Binding Background}" Value="Wall">
<Setter Property="Foreground" Value="{DynamicResource Wall}" />
</DataTrigger>
<DataTrigger Binding="{Binding Background}" Value="Player">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding X}" />
<Setter Property="Grid.Column" Value="{Binding Y}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
最後に、これはボタングリッドをバインドした ObservableCollection です。この質問ではあまり関係のない MVVM アーキテクチャを使用しているため、background プロパティは _model という値から値を取得します。重要なのは、Background プロパティは Corridor、Wall、または Player のみであるということです。
ObservableCollection<DungeonField> Fields = new ObservableCollection<DungeonField>();
for (Int32 i = 0; i < 9; ++i)
{
for (Int32 j = 0; j < 9; ++j)
Fields.Add(new DungeonField
{
Background = _model.GetField(i, j).ToString(),
X = i,
Y = j,
Number = i * 9 + j,
});
}
これら 2 つのイメージをリソースとしてプロジェクトに追加し、それらのビルド アクションをリソースに設定しています。私はwpfで写真を操作するのはかなり初心者なので、私の質問は何が欠けているのですか?
前もって感謝します
編集: DataTrigger 部分の xaml で DynamicResource を使用しないでください。既に Image 変数を宣言しているので、ボタンにバインドするだけです。DynamicResource の代わりに Binding を使用すると、これらの警告はすべて表示されなくなりますが、画像はグリッドに表示されません。