/
MainWindow.xaml
130 lines (113 loc) · 6.2 KB
/
MainWindow.xaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<Window x:Class="ReactiveBingViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ReactiveBingViewer.ViewModels"
xmlns:conv="clr-namespace:ReactiveBingViewer.Converters"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:Interactivity="clr-namespace:Reactive.Bindings.Interactivity;assembly=ReactiveProperty.NET45"
Title="Bing Image Search" >
<Window.DataContext>
<vm:MainWindowViewModel/>
</Window.DataContext>
<DockPanel Margin="4">
<!-- 検索バー -->
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<TextBox Margin="4,2" Padding="2" Text="{Binding SearchWord.Value,Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
Width="240" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<Interactivity:EventToReactiveCommand Command="{Binding SearchCommand}">
<conv:ReturnKeyDownConverter/>
</Interactivity:EventToReactiveCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
<Button Padding="8,2" Margin="4,2" Command="{Binding SearchCommand}">検索</Button>
<Button Padding="8,2" Margin="8,2" Command="{Binding CancelCommand}">キャンセル</Button>
<TextBlock Padding="8,2" Margin="2,2,0,2">Page:</TextBlock>
<Button Padding="8,2" Margin="2,2" Command="{Binding HeadPageCommand}"><<</Button>
<Button Padding="8,2" Margin="2,2" Command="{Binding PrevPageCommand}"><</Button>
<TextBox Padding="4,2" Margin="2,2" Text="{Binding PageNumber.Value,Mode=TwoWay}"/>
<Button Padding="8,2" Margin="2,2" Command="{Binding NextPageCommand}">></Button>
<Button Padding="8,2" Margin="2,2" Command="{Binding TailPageCommand}">>></Button>
</StackPanel>
<!-- サムネイルバー -->
<ListBox IsSynchronizedWithCurrentItem="True" DockPanel.Dock="Top"
ItemsSource="{Binding Images}" MinHeight="128"
SelectedItem="{Binding SelectedImage.Value}" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Stretch="Uniform" Source="{Binding Thumbnail.Value}" MaxHeight="200"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<!-- ステータスバー -->
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem DockPanel.Dock="Right">
<ProgressBar Width="200" Height="21" Value="{Binding PercentProgress.Value}" Minimum="0" Maximum="100" />
</StatusBarItem>
<Separator DockPanel.Dock="Right" />
<StatusBarItem>
<TextBlock Text="{Binding StatusMessage.Value,Mode=OneWay}"/>
</StatusBarItem>
</StatusBar>
<!-- エラー通知 -->
<Grid DockPanel.Dock="Bottom" Margin="4" Visibility="{Binding ErrorLogsVisibility.Value}">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Rectangle Grid.ColumnSpan="2" Stroke="Chocolate" Fill="LightYellow"/>
<ListBox Grid.Row="3" ItemsSource="{Binding ErrorLogs}" MaxHeight="120" Margin="0,0,4,0"
Background="Transparent" BorderBrush="{x:Null}"/>
<Button Grid.Column="1" Margin="2" VerticalAlignment="Top" HorizontalAlignment="Right"
Command="{Binding ClearErrorLogsCommand}" Background="Transparent"
FontFamily="Segoe UI Symbol"></Button>
</Grid>
<!-- 画像表示パネル -->
<Grid DataContext="{Binding Images/}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<!--画像-->
<Rectangle Grid.Column="0" Fill="LightSlateGray"/>
<Image Grid.Column="0"
Source="{Binding DisplayImage.Value}"
Stretch="Uniform" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SizeChanged">
<Interactivity:EventToReactiveCommand Command="{Binding SizeChangedCommand,Mode=OneWay}">
<conv:SizeChangedToSizeConverter/>
</Interactivity:EventToReactiveCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
<Image Grid.Column="0" Source="{Binding Overlay.Value}"/>
<!-- プロパティ -->
<Rectangle Grid.Column="1" Stroke="SteelBlue" />
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" FontWeight="Bold">プロパティ</TextBlock>
<StackPanel Grid.Row="1" Orientation="Vertical">
<TextBlock >リンク元: <Hyperlink NavigateUri="{Binding SourceUrl.Value}"
Command="{Binding NavigateCommand}" >
<TextBlock Text="{Binding SourceTitle.Value}"/>
</Hyperlink></TextBlock>
<TextBlock Text="{Binding ImageProperty.Value}" TextWrapping="Wrap" Padding="4" />
<ProgressBar Height="8" Margin="4,0"
IsIndeterminate="{Binding IsProcessing.Value}"
Visibility="{Binding ProgressVisibility.Value}"/>
</StackPanel>
</Grid>
</Grid>
</DockPanel>
</Window>