UWP SplitView 스플릿뷰 .NET

안드로이드에 Navigation Drawer 가 있듯이 UWP에도 비슷한 SplitView가 있다.






















<안드로이드의 Navigation Drawer>


















<Groove 뮤직플레이어의 SplitView>


MainPage.xaml
<Page
x:Class="SplitViewPractice.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SplitViewPractice"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<SplitView x:Name="SplitView" DisplayMode="CompactInline" IsPaneOpen="False">
<SplitView.Pane>
<StackPanel Background="DarkGray">
<Button x:Name="HamburgerButton" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" Width="50" Height="50" Background="Transparent" Click="HamburgerButton_Click"/>
</StackPanel>
</SplitView.Pane>
</SplitView>
</Grid>
</Page>

MainPage.xaml.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// 빈 페이지 항목 템플릿은 http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 에 문서화되어 있습니다.

namespace SplitViewPractice
{
/// <summary>
/// 자체적으로 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}

private void HamburgerButton_Click(object sender, RoutedEventArgs e)
{
SplitView.IsPaneOpen = !SplitView.IsPaneOpen;
}
}
}

Segoe MDL2 Assets 폰트에 햄버거버튼 아이콘이 있다. 그 외에도 다양한 아이콘이 존재하는데 사이트 링크를 걸어 놓겠다.


만약 다른 버튼들도 추가 하고싶다면 스택패널 내부에 더 추가 하면 된다.


WPF 음악파일 태그 불러오기 .NET

코드만 보실분은 저 아래로

WPF에서 ID3 태그를 불러오기 위해서는 참조를 추가해야한다.


















솔루션 탐색기에서 참조를 우클릭해서 NuGet 패키지 관리를 누른다.















찾아보기를 누르고 TagLib를 검색한다.

첫번째 나오는 것을 선택하고 설치를 한다.



































그 다음 음악을 추가한다. 왠만하면 프로젝트 폴더 내부에 구분이 될 수 있게 새로운 폴더를 만들어서 그 안에 넣도록 하자

여기서 중요한 것은 출력 디렉터리에 복사 옵션을 "새 버전이면 복사"로 해야 한다.

이제 코드이다.

제대로 값이 들어갔는지 확인하기 위해서 간단한 Xaml 파일을 만져보았다.

<Window x:Class="Mp3Tag.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:Mp3Tag"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"/>
<ColumnDefinition Width="0.5*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Grid.Row="0" VerticalAlignment="Center">
<StackPanel>
<TextBlock x:Name="album" TextAlignment="Center"/>
<TextBlock x:Name="singer" TextAlignment="Center"/>
<TextBlock x:Name="title" TextAlignment="Center"/>
<TextBlock x:Name="genre" TextAlignment="Center"/>
</StackPanel>
</Border>
<Image Grid.Column="1" Grid.Row="0" x:Name="albumart" HorizontalAlignment="Stretch"/>
</Grid>
</Window>

앨범, 가수, 노래, 장르를 출력할 텍스트블록을 만들고 오른쪽에 앨범아트를 출력할 이미지를 추가했다.

using System.Windows;
using System.Windows.Media.Imaging;

namespace Mp3Tag
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

TagLib.File file = TagLib.File.Create(@"c:\users\521ab\onedrive\documents\visual studio 2015\Projects\Mp3Tag\Mp3Tag\Music\We Are - ONE OK ROCK.flac");

string Album = file.Tag.Album;
string Title = file.Tag.Title;
string[] Singer = file.Tag.Artists;
string[] Genre = file.Tag.Genres;

album.Text = Album;
title.Text = Title;
singer.Text = Singer[0];
genre.Text = Genre[0];

////////////////////앨범 아트//////////////////////

TagLib.IPicture album_cover = file.Tag.Pictures[0];
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(album_cover.Data.Data);
BitmapImage cover = new BitmapImage();
cover.BeginInit();
cover.StreamSource = memoryStream;
cover.EndInit();

albumart.Source = cover;
}
}
}

TagLib.File.Create 뒷부분의 주소는 솔루션 탐색기에서 음악파일을 선택해 전체경로를 가져오면 된다.


WPF TextBox 워터마크 .NET

UWP(Universal Windows Platform)에서는 PlaceholderText로 바로 워터마크를 사용할 수 있어서,

당연히 WPF에서도 속성이 있을 줄 알았으나.... 없었다...

어쩔수 없이 Stack Overflow 에 가서 찾아보니까

Style 을 줘야 하는 것이였다. 제길....

<TextBox HorizontalAlignment="Stretch" Margin="20,0">
<TextBox.Style>
<Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style.Resources>
<VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual>
<Label Content="Search" Foreground="LightGray" />
</VisualBrush.Visual>
</VisualBrush>
</Style.Resources>
<Style.Triggers>
<Trigger Property="Text" Value="{x:Static sys:String.Empty}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter Property="Background" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>





































마우스로 클릭하면 사라지고 글자가 있으면 사라지고 아무것도 없으면 돌아온다.

부드럽지는 않지만 구현은 할 수 있다.

WPF 미디어 재생 .NET

WPF에서 미디어를 재생 하는 방법이다.

갑자기 WPF로 미디어 플레이어를 만들고 싶어서 만들던 와중 C#에서 사용했던 MediaPlayer를 이용해서 작성하였다.

WPF에서 미디어 재생 방법은 2가지가 있는데 그중 하나는 MediaElement가 있다.

MediaElement는 UI에서 쓰기에 특화된 것이고 MediaPlayer는 C# 전체에서 사용할 수 있는 것이다.

MSDN에서 계층구조를 보면....

비슷한 역할을 하는데 MediaPlayer는 System.Windows.Media 의 하위에 있는 반면,

MediaElement는 System.Windows.Controls의 하위에 위치하고 있다.

쨋든간에 나는 MediaPlayer를 사용했다.....

내가 사용한 프로젝트명은 WpfApplication2 이고 MP3 파일명은 Alinate.mp3 이니 자신의 파일명로 바꾸길 바란다.


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
<Window x:Class="WpfApplication2.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:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.25*"/>
<ColumnDefinition Width="0.25*"/>
<ColumnDefinition Width="0.25*"/>
<ColumnDefinition Width="0.25*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.3*"/>
<RowDefinition Height="0.3*"/>
<RowDefinition Height="0.3*"/>
</Grid.RowDefinitions>
<Button x:Name="play" Grid.Column="1" Grid.Row="1"
Content="재생"
Click="play_Click"
Margin="20,40"/>
<Button x:Name="stop" Grid.Column="2" Grid.Row="1"
Content="정지"
Click="stop_Click"
Margin="20,40"/>
</Grid>
</Window>


MainWindow.xaml.cs


 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication2
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>

public partial class MainWindow : Window
{
MediaPlayer mp = new MediaPlayer(); // MediaPlayer 인스턴스 생성
public MainWindow()
{
InitializeComponent();
mp.Open(new Uri(@"music\Alienate.mp3", UriKind.RelativeOrAbsolute)); // 아래에서 설명합니다.
}

private void stop_Click(object sender, RoutedEventArgs e) // 정지 버튼이 눌리면
{
mp.Stop(); // 재생을 정지합니다.
}

private void play_Click(object sender, RoutedEventArgs e) // 실행 버튼이 눌리면
{
if(play.Content.ToString() == "재생") // 재생중이지 않으면
{
mp.Play(); // 재생합니다.
play.Content = "일시중지"; // 재생/일시중지를 구별하기위해 일시중지로 바꿉니다.
} else // 재생중이면
{
mp.Pause(); // 일시중지합니다.
play.Content = "재생"; // 재생/일시중지를 구별하기위해 일시중지로 바꿉니다.
}

}
}
}
























파일을 넣어 주고 옆과 같이 "새 버전이면 복사"로 해줘야 된다.










자바 최대값, 최소값, 합계, 평균 구하기 Java

제가 최대값, 최소값, 합계, 평균 구할때 주로 사용하는 방법입니다.

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.ArrayList;
import java.util.Collections;

public class main{
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<>();
list.add(4);
list.add(44);
list.add(444);
int sum = 0;
int max = Collections.max(list);
int min = Collections.min(list);
for(Integer i : list){
sum += i;
}
int average = sum / list.size();
System.out.println("합계 = "+sum);
System.out.println("평균 = "+average);
System.out.println("최대값 = "+max);
System.out.println("최소값 = "+min);
}
}

만약에 입력받아서 넣고 싶다면 Scanner 를 사용하여 값을 받아와서 그 값을 list에 추가해주면 된다.

1 2 3