Skip to content

Commit 0bd7f85

Browse files
committed
4.4 cr
2 parents bece249 + 71bae09 commit 0bd7f85

13 files changed

+319
-0
lines changed

task4.4/App.axaml

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Application xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
x:Class="task4._4.App"
4+
xmlns:local="using:task4._4"
5+
RequestedThemeVariant="Default">
6+
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
7+
8+
<Application.DataTemplates>
9+
<local:ViewLocator/>
10+
</Application.DataTemplates>
11+
12+
<Application.Styles>
13+
<FluentTheme />
14+
</Application.Styles>
15+
</Application>

task4.4/App.axaml.cs

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Avalonia;
2+
using Avalonia.Controls.ApplicationLifetimes;
3+
using Avalonia.Markup.Xaml;
4+
using task4._4.ViewModels;
5+
using task4._4.Views;
6+
7+
namespace task4._4;
8+
9+
public partial class App : Application
10+
{
11+
public override void Initialize()
12+
{
13+
AvaloniaXamlLoader.Load(this);
14+
}
15+
16+
public override void OnFrameworkInitializationCompleted()
17+
{
18+
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
19+
{
20+
desktop.MainWindow = new MainWindow
21+
{
22+
DataContext = new MainWindowViewModel(),
23+
};
24+
}
25+
26+
base.OnFrameworkInitializationCompleted();
27+
}
28+
}

task4.4/Assets/avalonia-logo.ico

172 KB
Binary file not shown.

task4.4/Assets/petya.jpg

79.2 KB
Loading

task4.4/Program.cs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using Avalonia;
2+
using Avalonia.ReactiveUI;
3+
using System;
4+
5+
namespace task4._4;
6+
7+
sealed class Program
8+
{
9+
// Initialization code. Don't use any Avalonia, third-party APIs or any
10+
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
11+
// yet and stuff might break.
12+
[STAThread]
13+
public static void Main(string[] args) => BuildAvaloniaApp()
14+
.StartWithClassicDesktopLifetime(args);
15+
16+
// Avalonia configuration, don't remove; also used by visual designer.
17+
public static AppBuilder BuildAvaloniaApp()
18+
=> AppBuilder.Configure<App>()
19+
.UsePlatformDetect()
20+
.WithInterFont()
21+
.LogToTrace()
22+
.UseReactiveUI();
23+
}

task4.4/ViewLocator.cs

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using Avalonia.Controls;
3+
using Avalonia.Controls.Templates;
4+
using task4._4.ViewModels;
5+
6+
namespace task4._4;
7+
8+
public class ViewLocator : IDataTemplate
9+
{
10+
11+
public Control? Build(object? data)
12+
{
13+
if (data is null)
14+
return null;
15+
16+
var name = data.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
17+
var type = Type.GetType(name);
18+
19+
if (type != null)
20+
{
21+
var control = (Control)Activator.CreateInstance(type)!;
22+
control.DataContext = data;
23+
return control;
24+
}
25+
26+
return new TextBlock { Text = "Not Found: " + name };
27+
}
28+
29+
public bool Match(object? data)
30+
{
31+
return data is ViewModelBase;
32+
}
33+
}
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace task4._4.ViewModels;
2+
3+
public class MainWindowViewModel : ViewModelBase
4+
{
5+
public string BlogEntries => "Welcome to Avalonia!";
6+
public string News => "Welcome to Avalonia!";
7+
public string Text => "Welcome to Avalonia!";
8+
public string ImagePath => "/Assets/petya.jpg";
9+
10+
}

task4.4/ViewModels/ViewModelBase.cs

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using ReactiveUI;
2+
3+
namespace task4._4.ViewModels;
4+
5+
public class ViewModelBase : ReactiveObject
6+
{
7+
}

task4.4/Views/MainWindow.axaml

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<Window xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:vm="using:task4._4.ViewModels"
4+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6+
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
7+
x:Class="task4._4.Views.MainWindow"
8+
x:DataType="vm:MainWindowViewModel"
9+
Icon="/Assets/avalonia-logo.ico"
10+
Title="Lorem ipsum"
11+
Width="1280"
12+
Height="800"
13+
CanResize="False">
14+
15+
<Window.Styles>
16+
<Style Selector="TextBlock">
17+
<Setter Property="Margin" Value="0,10,20,10"></Setter>
18+
<Setter Property="Padding" Value="5,0"></Setter>
19+
<Setter Property="FontSize" Value="16"></Setter>
20+
<Setter Property="FontWeight" Value="Medium"></Setter>
21+
</Style>
22+
23+
<Style Selector="StackPanel">
24+
<Setter Property="Margin" Value="12"></Setter>
25+
</Style>
26+
</Window.Styles>
27+
28+
<Window.Resources>
29+
<ResourceDictionary>
30+
<Color x:Key="PrimaryColor">#212121</Color>
31+
<Color x:Key="SecondaryColor">#333333</Color>
32+
<Color x:Key="LightBlueColor">#66CCCC</Color>
33+
<Color x:Key="OrangeColor">#FFC080</Color>
34+
<Color x:Key="GreenColor">#33CC33</Color>
35+
<Color x:Key="PinkColor">#FF69B4</Color>
36+
<Color x:Key="BlueColor">#0099CC</Color>
37+
<Color x:Key="YellowColor">#FFFF66</Color>
38+
<Color x:Key="RedColor">#FF0000</Color>
39+
</ResourceDictionary>
40+
</Window.Resources>
41+
42+
<Grid ShowGridLines="False"
43+
RowDefinitions="auto,*,auto"
44+
ColumnDefinitions="950,310"
45+
Background="{StaticResource PrimaryColor}">
46+
47+
<DockPanel Grid.Row="0"
48+
Grid.ColumnSpan="5"
49+
Background="{StaticResource SecondaryColor}">
50+
51+
<TextBlock Foreground="{StaticResource LightBlueColor}">Home</TextBlock>
52+
<TextBlock Foreground="{StaticResource OrangeColor}">About</TextBlock>
53+
<TextBlock Foreground="{StaticResource GreenColor}">Blogs's Main Topic 1</TextBlock>
54+
<TextBlock Foreground="{StaticResource PinkColor}">Blogs's Main Topic 2</TextBlock>
55+
<TextBlock Foreground="{StaticResource BlueColor}">Blogs's Main Topic 3</TextBlock>
56+
<TextBlock Foreground="{StaticResource YellowColor}">Associated blogs</TextBlock>
57+
<TextBlock Foreground="{StaticResource RedColor}"
58+
Margin="0,10,40,10"
59+
DockPanel.Dock="Right"
60+
TextAlignment="Right">RSS</TextBlock>
61+
</DockPanel>
62+
63+
<StackPanel Orientation="Vertical"
64+
Grid.Column="0"
65+
Grid.Row="1">
66+
67+
<TextBlock TextAlignment="Left" Margin="0, 0, 0, 15">Article 1</TextBlock>
68+
<TextBlock TextWrapping="Wrap">
69+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc at libero in risus ultrices faucibus sed vitae est. Pellentesque in orci hendrerit, lacinia odio et, pellentesque mauris. Nullam consectetur lacinia commodo. Cras ullamcorper urna facilisis sapien finibus sollicitudin. Aliquam bibendum fringilla nunc vel efficitur. Vestibulum interdum elit tellus, sed fringilla quam ultrices in. Cras non mi molestie, porta ante at, condimentum purus.
70+
Sed ut eros a leo tincidunt porttitor. Maecenas consequat eget massa et tempus. Curabitur ultricies consequat risus quis viverra. Donec in neque ligula. Nunc imperdiet, velit non euismod interdum, quam libero maximus mi, ac bibendum orci libero ut erat. Phasellus tincidunt maximus dui at malesuada. Sed vitae urna at orci malesuada congue vitae sit amet purus. Aliquam nisi nibh, ornare ultrices sagittis vel, pellentesque ac lorem. Duis posuere dictum elit, a mollis metus eleifend vitae. Nam suscipit arcu non tincidunt sodales. Aliquam vitae urna nec velit consequat dignissim. Nullam tristique arcu vel dictum laoreet. Sed fringilla est magna, sed malesuada diam tincidunt ut.
71+
Donec congue est quam, nec efficitur lorem mattis varius. Proin feugiat elit ut quam sagittis, ac volutpat erat aliquam. Vestibulum ultricies erat ut elit rutrum, id lobortis urna vehicula. Maecenas euismod ornare ante eget imperdiet. Nunc placerat pretium ultricies. Maecenas vehicula, massa ut aliquam facilisis, orci sapien pharetra nisi, quis dapibus quam sem in odio. Suspendisse placerat tortor id convallis congue. Curabitur dapibus finibus leo, at suscipit arcu porta sit amet. Sed facilisis neque a mi maximus efficitur.
72+
Praesent sed sapien felis. Vivamus et tellus nibh. Ut vestibulum nulla sed dolor egestas venenatis. Proin vestibulum blandit iaculis.
73+
</TextBlock>
74+
<Image Height="320" Width="280" Source="{Binding ImagePath}"></Image>
75+
</StackPanel>
76+
77+
<StackPanel Orientation="Vertical"
78+
Grid.Column="1"
79+
Grid.Row="1">
80+
81+
<TextBlock TextWrapping="Wrap" Margin="0, 42, 0, 0">
82+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc at libero in risus ultrices faucibus sed vitae est. Pellentesque in orci hendrerit, lacinia odio et, pellentesque mauris. Nullam consectetur lacinia commodo. Cras ullamcorper urna facilisis sapien finibus sollicitudin. Aliquam bibendum fringilla nunc vel efficitur...
83+
</TextBlock>
84+
<TextBlock TextAlignment="Right" TextDecorations="Underline" Margin="0, 0, 0, 0">More</TextBlock>
85+
<TextBlock TextAlignment="Right" Margin="0, 5, 0, 0"> Yesterday </TextBlock>
86+
87+
<TextBlock TextWrapping="Wrap">
88+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc at libero in risus ultrices faucibus sed vitae est. Pellentesque in orci hendrerit, lacinia odio et, pellentesque mauris. Nullam consectetur lacinia commodo. Cras ullamcorper urna facilisis sapien finibus sollicitudin. Aliquam bibendum fringilla nunc vel efficitur...
89+
</TextBlock>
90+
<TextBlock TextAlignment="Right" TextDecorations="Underline" Margin="0, 0, 0, 0">More</TextBlock>
91+
<TextBlock TextAlignment="Right" Margin="0, 5, 0, 0">1 week ago</TextBlock>
92+
93+
</StackPanel>
94+
95+
<DockPanel Grid.Row="2"
96+
Grid.Column="0"
97+
DockPanel.Dock="Bottom"
98+
Background="{StaticResource SecondaryColor}">
99+
100+
<TextBlock Padding="2,0" Foreground="{StaticResource LightBlueColor}"
101+
VerticalAlignment="Center"
102+
Margin="0,10,10,10">Tags:</TextBlock>
103+
<TextBlock Padding="2,0" Foreground="{StaticResource OrangeColor}"
104+
VerticalAlignment="Center"
105+
Margin="0,10,8,10">Tag 1 Tag 2 Tag 3 Tag 4</TextBlock>
106+
107+
<StackPanel DockPanel.Dock="Right"
108+
Orientation="Horizontal"
109+
HorizontalAlignment="Right"
110+
VerticalAlignment="Center">
111+
<TextBlock Padding="2,0" Foreground="{StaticResource YellowColor}"
112+
Margin="0,10,20,10">Rate this article</TextBlock>
113+
<ComboBox Margin="0, 0, 0, 0" Padding="0" FontSize="14">
114+
<ComboBoxItem>1</ComboBoxItem>
115+
<ComboBoxItem>2</ComboBoxItem>
116+
<ComboBoxItem>3</ComboBoxItem>
117+
<ComboBoxItem>4</ComboBoxItem>
118+
<ComboBoxItem>5</ComboBoxItem>
119+
</ComboBox>
120+
</StackPanel>
121+
</DockPanel>
122+
</Grid>
123+
124+
</Window>

task4.4/Views/MainWindow.axaml.cs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using Avalonia.Controls;
2+
3+
namespace task4._4.Views;
4+
5+
public partial class MainWindow : Window
6+
{
7+
public MainWindow()
8+
{
9+
InitializeComponent();
10+
}
11+
}

task4.4/app.manifest

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
3+
<!-- This manifest is used on Windows only.
4+
Don't remove it as it might cause problems with window transparency and embedded controls.
5+
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
6+
<assemblyIdentity version="1.0.0.0" name="task4._4.Desktop"/>
7+
8+
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
9+
<application>
10+
<!-- A list of the Windows versions that this application has been tested on
11+
and is designed to work with. Uncomment the appropriate elements
12+
and Windows will automatically select the most compatible environment. -->
13+
14+
<!-- Windows 10 -->
15+
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
16+
</application>
17+
</compatibility>
18+
</assembly>

task4.4/task4.4.csproj

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<OutputType>WinExe</OutputType>
4+
<TargetFramework>net7.0</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
7+
<ApplicationManifest>app.manifest</ApplicationManifest>
8+
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<Folder Include="Models\" />
13+
<AvaloniaResource Include="Assets\**" />
14+
</ItemGroup>
15+
16+
<ItemGroup>
17+
<PackageReference Include="Avalonia" Version="11.0.10" />
18+
<PackageReference Include="Avalonia.Desktop" Version="11.0.10" />
19+
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.10" />
20+
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.10" />
21+
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
22+
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.10" />
23+
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.10" />
24+
</ItemGroup>
25+
</Project>

task4.4/task4.4.sln

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.5.002.0
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "task4.4", "task4.4.csproj", "{67442BCC-2846-4F8E-A787-760B9B50D685}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{67442BCC-2846-4F8E-A787-760B9B50D685}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{67442BCC-2846-4F8E-A787-760B9B50D685}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{67442BCC-2846-4F8E-A787-760B9B50D685}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{67442BCC-2846-4F8E-A787-760B9B50D685}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {6AC0D55D-3309-4430-8EFF-883E574A9DCA}
24+
EndGlobalSection
25+
EndGlobal

0 commit comments

Comments
 (0)