고프로 히어로8 액션캠 SPJB1 블랙 + 듀얼배터리 충전기 킷 탐사 황사마스크 KF80, 일반 대형, 개별포장, 20개입 곰곰 사과 배 혼합 선물세트 골드, 5.5kg, 1개 디붐 디투 블루투스 스피커, 단일상품, 포레스트그린 바디굿 3단밴드 손목보호대, 1개

폴더의 파일을 읽어서 내용중에 찾고자하는 내용이 있다면 목록에 표시되며 목록을 더블클릭하면

화면에 파일이 선택되어 표시됩니다.


[사용방법 - 간단]

1. 내용을 찾을 폴더를 찾거나 경로를 입력합니다.

2. 검색할 내용을 입력 후 Enter 하거나 Search  버튼을 클릭합니다.


목록을 더블클릭하면 아래 처럼 화면에 표시됩니다.


다운로드

https://kei-soft.bitbucket.io/XmlSearch.exe



고프로 히어로8 액션캠 SPJB1 블랙 + 듀얼배터리 충전기 킷 탐사 황사마스크 KF80, 일반 대형, 개별포장, 20개입 디붐 타임박스 스마트 LED 올인원 블루투스스피커, TIMEBOX, 심플블랙 디붐 디투 블루투스 스피커, 단일상품, 포레스트그린 바디굿 3단밴드 손목보호대, 1개

        // EUC-KR

        private string EuckrEncoding(string data)

        {

            System.Text.Encoding euckr = System.Text.Encoding.GetEncoding(51949);

            byte[] euckrBytes = euckr.GetBytes(data);


            string urlEncodingText = "";

            foreach (byte b in euckrBytes)

            {

                string addText = Convert.ToString(b, 16);

                urlEncodingText = urlEncodingText + "%" + addText;

            }

            return Convert.ToString(urlEncodingText);

        }


        // UTF-8

        private string Utf8Encoding(string data)

        {

            System.Text.Encoding utf8 = System.Text.Encoding.UTF8;

            byte[] utf8Bytes = utf8.GetBytes(data);


            string urlEncodingText = "";

            foreach (byte b in utf8Bytes)

            {

                string addText = Convert.ToString(b, 16);

                urlEncodingText = urlEncodingText + "%" + addText;

            }

            return Convert.ToString(urlEncodingText);

        }


 

Web 파이러터 처리시 한글을 % 가 포함된 문자열로 인코딩하여 보내할 경우가 있는데

이를 처리하기위해선 System.Web 의 HttpUtility 를 사용해야한다.

참조 추가에서 어셈블리의 System.Web 를 체크하면 된다.

 

 

사용방법은 아래와 같다.

 

 

// 인코딩하는 방법

string encodeName = HttpUtility.UrlEncode("테스트", Encoding.UTF8);

 

// 인코딩한 내용을 다시 디코딩하는 방법

string originalName = HttpUtility.UrlDecode(encodeName, Encoding.UTF8);

 

 

(encodeName  의 값은 "%ed%85%8c%ec%8a%a4%ed%8a%b8")

 

 

 

UpdateSourceTrigger 속성은 바인딩 소스 업데이트 타이밍을 결정하는 값을 가져오거나 설정할때 사용되는 속성입니다.

 

Default

Text속성의 기본값은 LostFocus이지만, 대부분의 종속성 속성의 기본값은 PropertyChanged입니다.

 

PropertyChanged

바인딩 대상 속성이 변경될 때마다 바인딩 소스를 즉시 업데이트합니다.

 

LostFocus

바인딩 대상 요소가 포커스를 잃을 때마다 바인딩 소스를 업데이트합니다.

 

Explicit

UpdateSource 메서드를 호출할 때만 바인딩 소스를 업데이트합니다.


예)

 BindingExpression bindingExpression = textBox.GetBindingExpression(TextBox.TextProperty);

 bindingExpression.UpdateSource();


 

 

* 간단히 말하면 커서가 벗어난 경우(LostFocus) 속성변경 처리를 할것이냐 아니면 실시간으로(PropertyChanged) 반영할것이냐라고 보면 될것같습니다.

 

아래는 간단한 예시입니다.

 

MainWindow.xaml

<Window x:Class="UpdateSourceTriggerTest.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        mc:Ignorable="d"

        Title="MainWindow" Height="190" Width="394.666">

    <Grid>

        <StackPanel>

            <Label Content="UpdateSourceTrigger=PropertyChanged"/>

            <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}"/>

            

            <Rectangle StrokeThickness="1" Fill="#465168" Height="1" />

            <Label Content=" UpdateSourceTrigger=Default"/>

            <TextBox Text="{Binding Name, UpdateSourceTrigger=Default}"/>

 

            <Rectangle StrokeThickness="1" Fill="#465168" Height="1" />

            <Label Content=" Value"/>

            <Label Content="{Binding Name}"/>

        </StackPanel>

    </Grid>

</Window>

 

 

MainWindow.xaml.cs

using System.Windows;

 

namespace UpdateSourceTriggerTest

{

    /// <summary>

    /// MainWindow.xaml에 대한 상호 작용 논리

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

 

            this.DataContext = new TestData() { Name = "TEST", Order = 1 };

        }

 

        public class TestData

        {

            public string Name { get; set; }

            public int Order { get; set; }

        }

    }

}

 

 


 

예시를 보면

PropertyChanged 인 경우는 실시간으로 변경사항이 반영되지만

Default 인 경우는 커서를 벗어난 경우 변경사항이 반영됩니다.

상황에 따라 맞는걸 쓰면 되겠습니다.

 

 

테스트박스가 비어있을 때 특정한 텍스트를 표시 하고 싶을때 사용합니다

("조회할 값을 입력해 주세요" 등..)

<Window x:Class="PlaceHolder.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        mc:Ignorable="d"

        Title="MainWindow" Height="86.638" Width="227.155">

    <StackPanel>

        <Grid>

            <TextBox Name="searchTextBox" Margin="10"  Text="" Width="180" Height="32" HorizontalAlignment="Left" VerticalAlignment="Center" VerticalContentAlignment="Center"/>

            <TextBlock Text="Search Name.." IsHitTestVisible="False" VerticalAlignment="Center" Margin="15,10,10,10" HorizontalAlignment="Left">

                <TextBlock.Style>

                    <Style TargetType="TextBlock">

                        <Setter Property="Visibility" Value="Hidden"/>

                        <Setter Property="Foreground" Value="Gray"/>

                        <Style.Triggers>

                            <DataTrigger Binding="{Binding Text, ElementName=searchTextBox}" Value="">

                                <Setter Property="Visibility" Value="Visible"/>

                            </DataTrigger>

                        </Style.Triggers>

                    </Style>

                </TextBlock.Style>

            </TextBlock>

        </Grid>

    </StackPanel>

</Window>



Image 를 원형으로 잘라 보이게 하고 싶을때는

Frame 로 감싸서 만들면 된다.


아래는 xaml 단 코드 예시이다.

<Frame 

    Margin="0" 

    Padding="0" 

    CornerRadius="30" 

    WidthRequest="60" 

    HeightRequest="60" 

    BackgroundColor="Transparent" 

    HasShadow="False" 

    IsClippedToBounds="True">

    <Image x:Name="simpleOrder2Image" Source="coffee.png"/>

</Frame>


여기서 유의할건 Frame 에 IsClippedToBounds="True" 를 반드시 설정해야한다는것이고

Xamarin.Forms 4.8.0 이어야 iOS 에서도 정상적으로 잘려서 보이게된다.

4.7.0 이하 버전에서는 iOS 에서 이미지가 잘려서 원형으로 나타나지 않는다. 


이는 버그로 수정되어 업데이트 된지 얼마되지 않었다.

https://github.com/xamarin/Xamarin.Forms/pull/11129



기존에 쓰던 프로그램이 조금 불편해서 만들었습니다.

 

 

사용방법은 간단합니다.

 

괄호에 표시되는 값은 실시간 정보이며

색 추출할 곳에 마우스를 대고 우클릭하면 색이 추출되어 아래와 같이 표시됩니다.

 

 

copy 버튼을 클릭하면 값이 복사 됩니다. 끝.^^

 

다운로드

https://kei-soft.bitbucket.io/ColorPicker.exe

 

HSV : hue saturation value의 약어. 색상(H), 채도(S), 명도(V) 를 의미한다.

 

아래 메서드를 통해 RGB,HSV 간에 변환을 할수 있다.

 

        /// <summary>

        /// Color 를 HSV 값으로 반환합니다.

        /// </summary>

        /// <param name="color">Color</param>

        /// <param name="hue">hue</param>

        /// <param name="saturation">saturation</param>

        /// <param name="value">value</param>

        public static void ColorToHSV(Color color, out double hue, out double saturation, out double value)

        {

            int max = Math.Max(color.R, Math.Max(color.G, color.B));

            int min = Math.Min(color.R, Math.Min(color.G, color.B));

 

            hue = color.GetHue();

            saturation = (max == 0) ? 0 : 1d - (1d * min / max);

            value = max / 255d;

        }

 

        /// <summary>

        /// HSV 값을 RGB 로 반환합니다.

        /// </summary>

        /// <param name="hue">hue</param>

        /// <param name="saturation">saturation</param>

        /// <param name="value">value</param>

        /// <returns>Color</returns>

        public static Color ColorFromHSV(double hue, double saturation, double value)

        {

            int hi = Convert.ToInt32(Math.Floor(hue / 60)) % 6;

            double f = hue / 60 - Math.Floor(hue / 60);

 

            value = value * 255;

            int v = Convert.ToInt32(value);

            int p = Convert.ToInt32(value * (1 - saturation));

            int q = Convert.ToInt32(value * (1 - f * saturation));

            int t = Convert.ToInt32(value * (1 - (1 - f) * saturation));

 

            if (hi == 0)      return Color.FromArgb(255, v, t, p);

            else if (hi == 1) return Color.FromArgb(255, q, v, p);

            else if (hi == 2) return Color.FromArgb(255, p, v, t);

            else if (hi == 3) return Color.FromArgb(255, p, q, v);

            else if (hi == 4) return Color.FromArgb(255, t, p, v);

            else              return Color.FromArgb(255, v, p, q);

        }

 

 

(테스트)

 

            Color blueColor = Color.LightBlue;

 

            ColorToHSV(blueColor, out double hue, out double saturation, out double value);

 

            Color convertColor =  ColorFromHSV(hue, saturation, value);

 

            if (blueColor.ToArgb() == convertColor.ToArgb())

            {

 

            }

 

 

값을 보면 같은 값으로 다시 변환되서 나온걸 확인 할수 있다.

 

 

 

자마린에서 기본 폰트가 아닌 다른 폰트를 사용하는 방법입니다.

 

우선 폰트를 다운 받습니다.

전 타이포_어울림체를 다운받았습니다.(무료)

 

폰트파일을 아래처럼 위치시킵니다.

(폴더구성은 다르게 해도 상관없습니다.)

 

 

각 폰트 속성에서 "포함리소스"(Embedded Resource) 를 선택합니다.

 

 

이제 준비는 끝났습니다.

App.xaml.cs 로 들어가 아래 처럼 namespace 위쪽에 assembly 를 정의합니다.

(참고로  Xamarin.forms  구버전이면 동작하지 않습니다.)

 

[assembly: ExportFont("Typo_EoulrimL.ttf", Alias = "RegularFont")]

[assembly: ExportFont("Typo_EoulrimM.ttf", Alias = "MediumFont")]

[assembly: ExportFont("Typo_EoulrimB.ttf", Alias = "BoldFont")]

 

 

 

 

이제 xaml 단에서 아래처럼 위에서 정의한 Alias 로 FontFamily 에 지정해서 쓰면됩니다.

(여러가지 방법이 있지만 이 방법이 저한테는 가장 간단한거 같습니다.)

 

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"

             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

             xmlns:local="clr-namespace:FontXam"

             x:Class="FontXam.MainPage">

 

    <StackLayout>

        <Label Text="안녕하세요(기본)" FontSize="20"

           HorizontalOptions="Center"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(BoldFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="BoldFont"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(MediumFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="MediumFont"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(RegularFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="RegularFont"

           VerticalOptions="CenterAndExpand" />

    </StackLayout>

 

</ContentPage>

 

 

(결과)

iOS

 

 

Android

 

소스

https://github.com/kei-soft/FontXam

 

 

 

Visual Studio 2017 에서 소스를 열었는데 아래처럼 오류가 났다.


심각도 코드 설명 프로젝트 파일 비표시 오류(Suppression) 상태

오류 필요한 Android 구성 요소가 일부 없습니다. 여기를 두 번 클릭하고 지시에 따라 설치하세요. 0

오류 WeatherApp.Android 프로젝트에 빌드에 필요한 Android SDK가 없습니다. 이 메시지를 두 번 클릭하고 지시에 따라 설치하세요. 0


더블 클릭하니 아래와 같은 창이 떴고 Accept 를 했으나 설치가 진행되지 않고 팝업만 닫히고 위 오류가 계속 떠있는 상황이..;;


아래 메뉴를 통해 SDK MAnager 로 들어가 봤다.


흠.. 먼가 잘못되있다...


옵션에서 봤을땐 제대로 되있는데 말이다.;;


아무튼 직접 지정을 해보았다.