-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.xaml
More file actions
216 lines (198 loc) · 11.1 KB
/
MainWindow.xaml
File metadata and controls
216 lines (198 loc) · 11.1 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
<Window x:Class="WPFBase.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFBase"
xmlns:avalon="https://github.com/Dirkster99/AvalonDock"
mc:Ignorable="d"
Title="{Binding ApplicationTitle}"
Height="700" Width="1200"
WindowStartupLocation="CenterScreen"
Background="{DynamicResource BackgroundColorBrush}"
AllowDrop="True"
Drop="Window_Drop"
DragOver="Window_DragOver">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Menu Bar -->
<Menu Grid.Row="0" Background="{DynamicResource BackgroundColorBrush}">
<MenuItem Header="_File">
<MenuItem Header="_New" Command="{Binding NewCommand}" InputGestureText="Ctrl+N"/>
<MenuItem Header="_Open" Command="{Binding OpenCommand}" InputGestureText="Ctrl+O"/>
<MenuItem Header="_Save" Command="{Binding SaveCommand}" InputGestureText="Ctrl+S"/>
<MenuItem Header="Save _All" Command="{Binding SaveAllCommand}" InputGestureText="Ctrl+Shift+S"/>
<Separator/>
<MenuItem Header="Recent Files" x:Name="RecentFilesMenuItem">
<MenuItem.Style>
<Style TargetType="MenuItem">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RecentFiles.Count}" Value="0">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
<MenuItem.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={x:Reference RecentFilesMenuItem}, Path=DataContext.RecentFiles}"/>
<Separator/>
<MenuItem Header="Clear Recent Files" Command="{Binding ClearRecentFilesCommand}"/>
</CompositeCollection>
</MenuItem.ItemsSource>
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding DisplayName}"/>
<Setter Property="Command" Value="{Binding DataContext.OpenRecentFileCommand, RelativeSource={RelativeSource AncestorType=Window}}"/>
<Setter Property="CommandParameter" Value="{Binding FilePath}"/>
<Setter Property="ToolTip" Value="{Binding FilePath}"/>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<Separator/>
<MenuItem Header="_Close" Command="{Binding CloseCommand}"/>
<MenuItem Header="Close All" Command="{Binding CloseAllCommand}"/>
<Separator/>
<MenuItem Header="E_xit" Command="{Binding ExitCommand}" InputGestureText="Alt+F4"/>
</MenuItem>
<MenuItem Header="_Edit">
<MenuItem Header="_Undo" InputGestureText="Ctrl+Z"/>
<MenuItem Header="_Redo" InputGestureText="Ctrl+Y"/>
<Separator/>
<MenuItem Header="Cu_t" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Copy" InputGestureText="Ctrl+C"/>
<MenuItem Header="_Paste" InputGestureText="Ctrl+V"/>
</MenuItem>
<MenuItem Header="_View">
<MenuItem Header="_Solution Explorer" Command="{Binding ShowSolutionExplorerCommand}"/>
<MenuItem Header="_Properties" Command="{Binding ShowPropertiesCommand}"/>
<MenuItem Header="_Output" Command="{Binding ShowOutputCommand}"/>
<MenuItem Header="_Error List" Command="{Binding ShowErrorListCommand}"/>
<Separator/>
<MenuItem Header="Toggle _Theme" Command="{Binding ToggleThemeCommand}"/>
<Separator/>
<MenuItem Header="_Reset Layout" Command="{Binding ResetLayoutCommand}"/>
<MenuItem Header="_Save Layout" Command="{Binding SaveLayoutCommand}"/>
<MenuItem Header="_Load Layout" Command="{Binding LoadLayoutCommand}"/>
</MenuItem>
<MenuItem Header="_Window">
<MenuItem Header="_Float All" Command="{Binding FloatAllCommand}"/>
<MenuItem Header="_Dock All" Command="{Binding DockAllCommand}"/>
<Separator/>
<MenuItem Header="_Close All Documents" Command="{Binding CloseAllDocumentsCommand}"/>
</MenuItem>
<MenuItem Header="_Help">
<MenuItem Header="_About" Command="{Binding ShowAboutCommand}"/>
<MenuItem Header="_Test Exception" Command="{Binding TestExceptionCommand}"/>
</MenuItem>
</Menu>
<!-- Toolbar -->
<ToolBar Grid.Row="1" Background="{DynamicResource BackgroundColorBrush}">
<Button Command="{Binding NewCommand}" ToolTip="New (Ctrl+N)" Padding="5" Margin="2">
<TextBlock Text="📄 New" />
</Button>
<Button Command="{Binding OpenCommand}" ToolTip="Open (Ctrl+O)" Padding="5" Margin="2">
<TextBlock Text="📁 Open" />
</Button>
<Button Command="{Binding SaveCommand}" ToolTip="Save (Ctrl+S)" Padding="5" Margin="2">
<TextBlock Text="💾 Save" />
</Button>
<Separator/>
<Button Command="{Binding UndoCommand}" ToolTip="Undo (Ctrl+Z)" Padding="5" Margin="2">
<TextBlock Text="↶ Undo" />
</Button>
<Button Command="{Binding RedoCommand}" ToolTip="Redo (Ctrl+Y)" Padding="5" Margin="2">
<TextBlock Text="↷ Redo" />
</Button>
<Separator/>
<Button Command="{Binding ToggleThemeCommand}" ToolTip="Toggle Theme" Padding="5" Margin="2">
<TextBlock Text="🌓 Theme" />
</Button>
</ToolBar>
<!-- AvalonDock Docking Manager -->
<avalon:DockingManager x:Name="DockManager"
Grid.Row="2"
DocumentsSource="{Binding Documents}"
AnchorablesSource="{Binding Tools}"
ActiveContent="{Binding ActiveDocument, Mode=TwoWay}">
<!-- Theme -->
<avalon:DockingManager.Theme>
<avalon:Vs2013LightTheme/>
</avalon:DockingManager.Theme>
<!-- Layout Update Strategy -->
<avalon:DockingManager.LayoutUpdateStrategy>
<local:LayoutInitializer/>
</avalon:DockingManager.LayoutUpdateStrategy>
<!-- Default Layout -->
<avalon:LayoutRoot>
<avalon:LayoutPanel Orientation="Horizontal">
<!-- Left Tools -->
<avalon:LayoutAnchorablePane Name="LeftTools" DockWidth="250">
</avalon:LayoutAnchorablePane>
<!-- Center Documents and Bottom Tools -->
<avalon:LayoutPanel Orientation="Vertical">
<!-- Documents -->
<avalon:LayoutDocumentPane/>
<!-- Bottom Tools -->
<avalon:LayoutAnchorablePane Name="BottomTools" DockHeight="150">
</avalon:LayoutAnchorablePane>
</avalon:LayoutPanel>
<!-- Right Tools -->
<avalon:LayoutAnchorablePane Name="RightTools" DockWidth="250">
</avalon:LayoutAnchorablePane>
</avalon:LayoutPanel>
</avalon:LayoutRoot>
<!-- Document Header Template -->
<avalon:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Title}" VerticalAlignment="Center"/>
<TextBlock Text="{Binding Content.DataContext.IsDirty,
Converter={StaticResource DirtyStateToSymbolConverter}}"
Margin="2,0,0,0" VerticalAlignment="Center"
Foreground="Red" FontWeight="Bold"/>
</StackPanel>
</DataTemplate>
</avalon:DockingManager.DocumentHeaderTemplate>
<!-- Anchorable Header Template -->
<avalon:DockingManager.AnchorableHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" VerticalAlignment="Center"/>
</DataTemplate>
</avalon:DockingManager.AnchorableHeaderTemplate>
</avalon:DockingManager>
<!-- Status Bar -->
<StatusBar Grid.Row="3" Background="{DynamicResource BackgroundColorBrush}">
<StatusBarItem>
<TextBlock Text="{Binding StatusText}" Foreground="{DynamicResource ForegroundColorBrush}"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<ProgressBar Width="100" Height="16"
Value="{Binding ProgressValue}"
Visibility="{Binding ProgressValue, Converter={StaticResource DoubleToVisibilityConverter}}"
Foreground="{Binding ProgressValue, Converter={StaticResource ProgressToBrushConverter}}"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="{Binding DocumentCount, Converter={StaticResource DocumentCountConverter}}"
Foreground="{DynamicResource ForegroundColorBrush}"/>
</StatusBarItem>
<Separator/>
<StatusBarItem HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Theme: " Foreground="{DynamicResource ForegroundColorBrush}"/>
<TextBlock Text="{Binding CurrentThemeName, Converter={StaticResource ThemeNameConverter}}"
Foreground="{DynamicResource PrimaryColorBrush}"
FontWeight="Bold"/>
</StackPanel>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>