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

回答編集履歴

1

見直しキャンペーン中

2023/07/26 13:15

投稿

TN8001
TN8001

スコア10180

answer CHANGED
@@ -1,124 +1,124 @@
1
- あまり自信がありませんが、こういうことでしょうか?
2
-
3
- ```xaml
4
- <Window
5
- x:Class="Questions316881.MainWindow"
6
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
7
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
8
- xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
9
- Width="800"
10
- Height="450">
11
- <Window.Resources>
12
- <!--<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
13
- <Grid>
14
- <StackPanel>
15
- <Ellipse Height="100">
16
- <Ellipse.Resources>
17
- <Style TargetType="Ellipse">
18
- <Setter Property="Fill" Value="Gray" />
19
- <Style.Triggers>
20
- <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Value="赤丸">
21
- <Setter Property="Fill" Value="Red" />
22
- </DataTrigger>
23
- <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Value="緑丸">
24
- <Setter Property="Fill" Value="Green" />
25
- </DataTrigger>
26
- <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Value="青丸">
27
- <Setter Property="Fill" Value="Blue" />
28
- </DataTrigger>
29
- </Style.Triggers>
30
- </Style>
31
- </Ellipse.Resources>
32
- </Ellipse>
33
- <Rectangle Height="100" Fill="Gray" />
34
- <Label Content="{TemplateBinding Tag}" />
35
- </StackPanel>
36
- <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
37
- </Grid>
38
- </ControlTemplate>-->
39
-
40
- <!-- ↑これでも動きますが、↓の方が少し短いしわかりやすそうです -->
41
-
42
- <ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
43
- <Grid>
44
- <StackPanel>
45
- <Ellipse
46
- x:Name="ellipse"
47
- Height="100"
48
- Fill="Gray" />
49
- <Rectangle Height="100" Fill="Gray" />
50
- <Label Content="{TemplateBinding Tag}" />
51
- </StackPanel>
52
- <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
53
- </Grid>
54
- <ControlTemplate.Triggers>
55
- <Trigger Property="Tag" Value="赤丸">
56
- <Setter TargetName="ellipse" Property="Fill" Value="Red" />
57
- </Trigger>
58
- <Trigger Property="Tag" Value="緑丸">
59
- <Setter TargetName="ellipse" Property="Fill" Value="Green" />
60
- </Trigger>
61
- <Trigger Property="Tag" Value="青丸">
62
- <Setter TargetName="ellipse" Property="Fill" Value="Blue" />
63
- </Trigger>
64
- </ControlTemplate.Triggers>
65
- </ControlTemplate>
66
- </Window.Resources>
67
- <StackPanel
68
- HorizontalAlignment="Center"
69
- VerticalAlignment="Center"
70
- Orientation="Horizontal">
71
-
72
- <Button
73
- Content="ButtonA"
74
- Tag="{Binding ButtonAFlag}"
75
- Template="{StaticResource ButtonTemplate}">
76
- <behaviors:Interaction.Triggers>
77
- <behaviors:EventTrigger EventName="PreviewMouseLeftButtonUp">
78
- <behaviors:CallMethodAction MethodName="ButtonAOn" TargetObject="{Binding}" />
79
- </behaviors:EventTrigger>
80
- </behaviors:Interaction.Triggers>
81
- </Button>
82
-
83
- <Button
84
- Content="ButtonB"
85
- Tag="{Binding ButtonBFlag}"
86
- Template="{StaticResource ButtonTemplate}">
87
- <behaviors:Interaction.Triggers>
88
- <behaviors:EventTrigger EventName="PreviewMouseLeftButtonUp">
89
- <behaviors:CallMethodAction MethodName="ButtonBOn" TargetObject="{Binding}" />
90
- </behaviors:EventTrigger>
91
- </behaviors:Interaction.Triggers>
92
- </Button>
93
- </StackPanel>
94
- </Window>
95
- ```
96
-
97
- ```C#
98
- using Livet;
99
- using System.Windows;
100
-
101
- namespace Questions316881
102
- {
103
- public class MainViewModel : ViewModel
104
- {
105
- private string _ButtonAFlag = "赤丸";
106
- public string ButtonAFlag { get => _ButtonAFlag; set => RaisePropertyChangedIfSet(ref _ButtonAFlag, value); }
107
-
108
- private string _ButtonBFlag = "青丸";
109
- public string ButtonBFlag { get => _ButtonBFlag; set => RaisePropertyChangedIfSet(ref _ButtonBFlag, value); }
110
-
111
- public void ButtonAOn() => ButtonAFlag = ButtonAFlag == "赤丸" ? "緑丸" : "赤丸";
112
- public void ButtonBOn() => ButtonBFlag = ButtonBFlag == "青丸" ? "緑丸" : "青丸";
113
- }
114
-
115
- public partial class MainWindow : Window
116
- {
117
- public MainWindow()
118
- {
119
- InitializeComponent();
120
- DataContext = new MainViewModel();
121
- }
122
- }
123
- }
1
+ あまり自信がありませんが、こういうことでしょうか?
2
+
3
+ ```xml
4
+ <Window
5
+ x:Class="Questions316881.MainWindow"
6
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
7
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
8
+ xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
9
+ Width="800"
10
+ Height="450">
11
+ <Window.Resources>
12
+ <!--<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
13
+ <Grid>
14
+ <StackPanel>
15
+ <Ellipse Height="100">
16
+ <Ellipse.Resources>
17
+ <Style TargetType="Ellipse">
18
+ <Setter Property="Fill" Value="Gray" />
19
+ <Style.Triggers>
20
+ <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Value="赤丸">
21
+ <Setter Property="Fill" Value="Red" />
22
+ </DataTrigger>
23
+ <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Value="緑丸">
24
+ <Setter Property="Fill" Value="Green" />
25
+ </DataTrigger>
26
+ <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Value="青丸">
27
+ <Setter Property="Fill" Value="Blue" />
28
+ </DataTrigger>
29
+ </Style.Triggers>
30
+ </Style>
31
+ </Ellipse.Resources>
32
+ </Ellipse>
33
+ <Rectangle Height="100" Fill="Gray" />
34
+ <Label Content="{TemplateBinding Tag}" />
35
+ </StackPanel>
36
+ <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
37
+ </Grid>
38
+ </ControlTemplate>-->
39
+
40
+ <!-- ↑これでも動きますが、↓の方が少し短いしわかりやすそうです -->
41
+
42
+ <ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
43
+ <Grid>
44
+ <StackPanel>
45
+ <Ellipse
46
+ x:Name="ellipse"
47
+ Height="100"
48
+ Fill="Gray" />
49
+ <Rectangle Height="100" Fill="Gray" />
50
+ <Label Content="{TemplateBinding Tag}" />
51
+ </StackPanel>
52
+ <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
53
+ </Grid>
54
+ <ControlTemplate.Triggers>
55
+ <Trigger Property="Tag" Value="赤丸">
56
+ <Setter TargetName="ellipse" Property="Fill" Value="Red" />
57
+ </Trigger>
58
+ <Trigger Property="Tag" Value="緑丸">
59
+ <Setter TargetName="ellipse" Property="Fill" Value="Green" />
60
+ </Trigger>
61
+ <Trigger Property="Tag" Value="青丸">
62
+ <Setter TargetName="ellipse" Property="Fill" Value="Blue" />
63
+ </Trigger>
64
+ </ControlTemplate.Triggers>
65
+ </ControlTemplate>
66
+ </Window.Resources>
67
+ <StackPanel
68
+ HorizontalAlignment="Center"
69
+ VerticalAlignment="Center"
70
+ Orientation="Horizontal">
71
+
72
+ <Button
73
+ Content="ButtonA"
74
+ Tag="{Binding ButtonAFlag}"
75
+ Template="{StaticResource ButtonTemplate}">
76
+ <behaviors:Interaction.Triggers>
77
+ <behaviors:EventTrigger EventName="PreviewMouseLeftButtonUp">
78
+ <behaviors:CallMethodAction MethodName="ButtonAOn" TargetObject="{Binding}" />
79
+ </behaviors:EventTrigger>
80
+ </behaviors:Interaction.Triggers>
81
+ </Button>
82
+
83
+ <Button
84
+ Content="ButtonB"
85
+ Tag="{Binding ButtonBFlag}"
86
+ Template="{StaticResource ButtonTemplate}">
87
+ <behaviors:Interaction.Triggers>
88
+ <behaviors:EventTrigger EventName="PreviewMouseLeftButtonUp">
89
+ <behaviors:CallMethodAction MethodName="ButtonBOn" TargetObject="{Binding}" />
90
+ </behaviors:EventTrigger>
91
+ </behaviors:Interaction.Triggers>
92
+ </Button>
93
+ </StackPanel>
94
+ </Window>
95
+ ```
96
+
97
+ ```cs
98
+ using Livet;
99
+ using System.Windows;
100
+
101
+ namespace Questions316881
102
+ {
103
+ public class MainViewModel : ViewModel
104
+ {
105
+ private string _ButtonAFlag = "赤丸";
106
+ public string ButtonAFlag { get => _ButtonAFlag; set => RaisePropertyChangedIfSet(ref _ButtonAFlag, value); }
107
+
108
+ private string _ButtonBFlag = "青丸";
109
+ public string ButtonBFlag { get => _ButtonBFlag; set => RaisePropertyChangedIfSet(ref _ButtonBFlag, value); }
110
+
111
+ public void ButtonAOn() => ButtonAFlag = ButtonAFlag == "赤丸" ? "緑丸" : "赤丸";
112
+ public void ButtonBOn() => ButtonBFlag = ButtonBFlag == "青丸" ? "緑丸" : "青丸";
113
+ }
114
+
115
+ public partial class MainWindow : Window
116
+ {
117
+ public MainWindow()
118
+ {
119
+ InitializeComponent();
120
+ DataContext = new MainViewModel();
121
+ }
122
+ }
123
+ }
124
124
  ```