teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

見直しキャンペーン中

2023/07/21 09:04

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -1,156 +1,156 @@
1
- > これを特定のセルを指定することは可能でしょうか?
2
-
3
- `GridViewColumn.CellTemplate`で変更することになります。
4
-
5
- 雑で申し訳ないですが、色の変更までの例です。
6
- ```xaml
7
- <Window
8
- x:Class="Questions248072.MainWindow"
9
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
10
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
11
- Title="MainWindow"
12
- Width="800"
13
- Height="450">
14
- <Grid>
15
- <ListView ItemsSource="{Binding Users}">
16
- <ListView.Resources>
17
-
18
- <ContextMenu x:Key="ContextMenu">
19
- <MenuItem
20
- Click="MenuItem_Click"
21
- Header="通常"
22
- IsChecked="{Binding IsWhite, Mode=OneWay}" />
23
- <MenuItem
24
- Click="MenuItem_Click"
25
- Header="黄色"
26
- IsChecked="{Binding IsYellow, Mode=OneWay}" />
27
- <MenuItem
28
- Click="MenuItem_Click"
29
- Header="赤"
30
- IsChecked="{Binding IsRed, Mode=OneWay}" />
31
- </ContextMenu>
32
- </ListView.Resources>
33
-
34
- <ListView.ItemContainerStyle>
35
- <Style TargetType="{x:Type ListViewItem}">
36
- <Setter Property="HorizontalContentAlignment" Value="Stretch" />
37
- <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}" />
38
- </Style>
39
- </ListView.ItemContainerStyle>
40
-
41
- <ListView.View>
42
- <GridView>
43
- <GridViewColumn
44
- Width="170"
45
- DisplayMemberBinding="{Binding No}"
46
- Header="No" />
47
-
48
- <GridViewColumn Width="80" Header="Name">
49
- <GridViewColumn.CellTemplate>
50
- <DataTemplate>
51
- <Border x:Name="bg" Margin="-6,0,-6,0">
52
- <TextBlock Margin="6,0,6,0" Text="{Binding Name}" />
53
- </Border>
54
- <DataTemplate.Triggers>
55
- <DataTrigger Binding="{Binding BkColor}" Value="Red">
56
- <Setter TargetName="bg" Property="Background" Value="Red" />
57
- </DataTrigger>
58
- <DataTrigger Binding="{Binding BkColor}" Value="Yellow">
59
- <Setter TargetName="bg" Property="Background" Value="#FE0" />
60
- </DataTrigger>
61
- </DataTemplate.Triggers>
62
- </DataTemplate>
63
- </GridViewColumn.CellTemplate>
64
- </GridViewColumn>
65
-
66
- <GridViewColumn
67
- Width="80"
68
- DisplayMemberBinding="{Binding Data}"
69
- Header="Data" />
70
- </GridView>
71
- </ListView.View>
72
- </ListView>
73
- </Grid>
74
- </Window>
75
- ```
76
-
77
- ```C#
78
- using System.Collections.ObjectModel;
79
- using System.ComponentModel;
80
- using System.Runtime.CompilerServices;
81
- using System.Windows;
82
- using System.Windows.Controls;
83
-
84
- namespace Questions248072
85
- {
86
- public class User : INotifyPropertyChanged
87
- {
88
- public string No { get; set; }
89
- public string Name { get; set; }
90
- public string Data { get; set; }
91
- public string BkColor { get => _BkColor; set => Set(ref _BkColor, value, null); } // 面倒なので全プロパティ発砲
92
- public string _BkColor;
93
-
94
- // 全くイケていないがコンバータを書くより手軽なので。。。
95
- public bool IsRed => BkColor == "Red";
96
- public bool IsYellow => BkColor == "Yellow";
97
- public bool IsWhite => !IsRed && !IsYellow;
98
-
99
- #region INotifyPropertyChanged
100
- public event PropertyChangedEventHandler PropertyChanged;
101
- protected bool Set<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
102
- {
103
- if(Equals(storage, value)) return false;
104
- storage = value;
105
- OnPropertyChanged(propertyName);
106
- return true;
107
- }
108
- protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
109
- => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
110
- #endregion
111
- }
112
-
113
- public partial class MainWindow : Window
114
- {
115
- public ObservableCollection<User> Users { get; }
116
-
117
- public MainWindow()
118
- {
119
- InitializeComponent();
120
-
121
- Users = new ObservableCollection<User>
122
- {
123
- new User{ No = "WPF C# VS2015", Name = "aaa", Data = "bbb", BkColor = "Red", },
124
- new User{ No = "WPF C# VS2017", Name = "aaa", Data = "bbb", BkColor = "Yellow", },
125
- new User{ No = "WPF C# VS2019", Name = "aaa", Data = "bbb", },
126
- };
127
-
128
- DataContext = this;
129
- }
130
-
131
- private void MenuItem_Click(object sender, RoutedEventArgs e)
132
- {
133
- if(sender is MenuItem menuItem)
134
- {
135
- if(menuItem.DataContext is User user)
136
- {
137
- switch(menuItem.Header)
138
- {
139
- case "通常":
140
- user.BkColor = "";
141
- break;
142
- case "黄色":
143
- user.BkColor = "Yellow";
144
- break;
145
- case "赤":
146
- user.BkColor = "Red";
147
- break;
148
- }
149
- }
150
- }
151
- }
152
- }
153
- }
154
- ```
155
-
1
+ > これを特定のセルを指定することは可能でしょうか?
2
+
3
+ `GridViewColumn.CellTemplate`で変更することになります。
4
+
5
+ 雑で申し訳ないですが、色の変更までの例です。
6
+ ```xml
7
+ <Window
8
+ x:Class="Questions248072.MainWindow"
9
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
10
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
11
+ Title="MainWindow"
12
+ Width="800"
13
+ Height="450">
14
+ <Grid>
15
+ <ListView ItemsSource="{Binding Users}">
16
+ <ListView.Resources>
17
+
18
+ <ContextMenu x:Key="ContextMenu">
19
+ <MenuItem
20
+ Click="MenuItem_Click"
21
+ Header="通常"
22
+ IsChecked="{Binding IsWhite, Mode=OneWay}" />
23
+ <MenuItem
24
+ Click="MenuItem_Click"
25
+ Header="黄色"
26
+ IsChecked="{Binding IsYellow, Mode=OneWay}" />
27
+ <MenuItem
28
+ Click="MenuItem_Click"
29
+ Header="赤"
30
+ IsChecked="{Binding IsRed, Mode=OneWay}" />
31
+ </ContextMenu>
32
+ </ListView.Resources>
33
+
34
+ <ListView.ItemContainerStyle>
35
+ <Style TargetType="{x:Type ListViewItem}">
36
+ <Setter Property="HorizontalContentAlignment" Value="Stretch" />
37
+ <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}" />
38
+ </Style>
39
+ </ListView.ItemContainerStyle>
40
+
41
+ <ListView.View>
42
+ <GridView>
43
+ <GridViewColumn
44
+ Width="170"
45
+ DisplayMemberBinding="{Binding No}"
46
+ Header="No" />
47
+
48
+ <GridViewColumn Width="80" Header="Name">
49
+ <GridViewColumn.CellTemplate>
50
+ <DataTemplate>
51
+ <Border x:Name="bg" Margin="-6,0,-6,0">
52
+ <TextBlock Margin="6,0,6,0" Text="{Binding Name}" />
53
+ </Border>
54
+ <DataTemplate.Triggers>
55
+ <DataTrigger Binding="{Binding BkColor}" Value="Red">
56
+ <Setter TargetName="bg" Property="Background" Value="Red" />
57
+ </DataTrigger>
58
+ <DataTrigger Binding="{Binding BkColor}" Value="Yellow">
59
+ <Setter TargetName="bg" Property="Background" Value="#FE0" />
60
+ </DataTrigger>
61
+ </DataTemplate.Triggers>
62
+ </DataTemplate>
63
+ </GridViewColumn.CellTemplate>
64
+ </GridViewColumn>
65
+
66
+ <GridViewColumn
67
+ Width="80"
68
+ DisplayMemberBinding="{Binding Data}"
69
+ Header="Data" />
70
+ </GridView>
71
+ </ListView.View>
72
+ </ListView>
73
+ </Grid>
74
+ </Window>
75
+ ```
76
+
77
+ ```cs
78
+ using System.Collections.ObjectModel;
79
+ using System.ComponentModel;
80
+ using System.Runtime.CompilerServices;
81
+ using System.Windows;
82
+ using System.Windows.Controls;
83
+
84
+ namespace Questions248072
85
+ {
86
+ public class User : INotifyPropertyChanged
87
+ {
88
+ public string No { get; set; }
89
+ public string Name { get; set; }
90
+ public string Data { get; set; }
91
+ public string BkColor { get => _BkColor; set => Set(ref _BkColor, value, null); } // 面倒なので全プロパティ発砲
92
+ public string _BkColor;
93
+
94
+ // 全くイケていないがコンバータを書くより手軽なので。。。
95
+ public bool IsRed => BkColor == "Red";
96
+ public bool IsYellow => BkColor == "Yellow";
97
+ public bool IsWhite => !IsRed && !IsYellow;
98
+
99
+ #region INotifyPropertyChanged
100
+ public event PropertyChangedEventHandler PropertyChanged;
101
+ protected bool Set<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
102
+ {
103
+ if(Equals(storage, value)) return false;
104
+ storage = value;
105
+ OnPropertyChanged(propertyName);
106
+ return true;
107
+ }
108
+ protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
109
+ => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
110
+ #endregion
111
+ }
112
+
113
+ public partial class MainWindow : Window
114
+ {
115
+ public ObservableCollection<User> Users { get; }
116
+
117
+ public MainWindow()
118
+ {
119
+ InitializeComponent();
120
+
121
+ Users = new ObservableCollection<User>
122
+ {
123
+ new User{ No = "WPF C# VS2015", Name = "aaa", Data = "bbb", BkColor = "Red", },
124
+ new User{ No = "WPF C# VS2017", Name = "aaa", Data = "bbb", BkColor = "Yellow", },
125
+ new User{ No = "WPF C# VS2019", Name = "aaa", Data = "bbb", },
126
+ };
127
+
128
+ DataContext = this;
129
+ }
130
+
131
+ private void MenuItem_Click(object sender, RoutedEventArgs e)
132
+ {
133
+ if(sender is MenuItem menuItem)
134
+ {
135
+ if(menuItem.DataContext is User user)
136
+ {
137
+ switch(menuItem.Header)
138
+ {
139
+ case "通常":
140
+ user.BkColor = "";
141
+ break;
142
+ case "黄色":
143
+ user.BkColor = "Yellow";
144
+ break;
145
+ case "赤":
146
+ user.BkColor = "Red";
147
+ break;
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ ```
155
+
156
156
  ![アプリ画像](6aae9eb82308358ad7d5fdb3caecbd71.png)